Make parallel version of ConvASREncoder
The change introduces an encoder that can stack and execute several similar Jasper blocks side by side. 

This implementation can be used to define and train CarneliNet.

Underlying ParallelBlock supports tower dropout to train models that can be reconfigured during inference time.

# Usage

## Config 
Define proper target for encoder.  Use multiple values of kernel sizes to define the towers. The rest of the parameters will be shared across all of them.
```
          ...
  encoder:
    _target_: nemo.collections.asr.modules.ParallelConvASREncoder

          ...
    jasper:
      - filters: 384
        kernel: [11, 13, 15, 17]
        aggregation_mode: "dropout"
        block_dropout: 0.1
        ...
        
```

## Code 

Just call necessary model with correct config, as usual.
```
cfg = OmegaConf.load(cfg_path)
asr_model = nemo_asr.models.EncDecCTCModelBPE(cfg=cgf, trainer=trainer)
```
