Add tarred dataset support for NMT
This pull request **introduces 1 alert** when merging f627e2fc99ea9d0ecb97718ce18063f4f77d099a into 8ccb4f3349de7603f7607dbd74de61795a5f5f68 - [view on LGTM.com](https://lgtm.com/projects/g/NVIDIA/NeMo/rev/pr-7a30c88d861953193617907866ce02d73eb64851)

**new alerts:**

* 1 for Unused import
This PR adds support for Tarred Datasets when training NMT models on very large datasets. It avoids loading the entire dataset into CPU memory for every DDP process. It uses webdataset (https://github.com/tmbdev/webdataset) similar to ASR and language modeling.

To use this functionality

1. Run `python examples/nlp/machine_translation/create_tarred_parallel_dataset.py --clean --bpe_dropout 0.1 --shared_tokenizer --src_fname src_file.txt --tgt_fname tgt_file.txt --out_dir /path/to/out_dir --vocab_size 32000 --tokens_in_batch 16000 --lines_per_dataset_fragment 5000000 --num_batches_per_tarfile 1000` to create a folder that contains many tar files. Each tar file consists of a certain number of batches (specified by `num_batches_per_tarfile`), where each batch is a pickle file. The output folder will also contain `metadata.json` that contains the total number of training batches and YTTM tokenizer model files.
2. Point to the tarred dataset folder when training like so

```
python examples/nlp/machine_translation/enc_dec_nmt.py -c aayn_base \
     trainer.gpus=8 \
     +trainer.max_steps=300000
     ........... 
     model.train_ds.src_file_name=/path/to/out_dir/batches.tokens.16000._OP_1..100_CL_.tar \
     model.train_ds.tgt_file_name=/path/to/out_dir/batches.tokens.16000._OP_1..100_CL_.tar \
     +model.train_ds.load_from_tarred_dataset=true \
     +model.train_ds.metadata_path=/path/to/out_dir/metadata.json \
     +model.train_ds.tar_shuffle_n=100 \
     .............
```