byt5 unicode implementation
This PR adds:

* a straightforward implementation of unicode encoding & decoding from [ByT5](https://arxiv.org/abs/2105.13626)
* a very bare-bones text processor for use with this tokenizer that can support any language.

Usage:

To enable this, add the following lines to your nemo launch script:

```
model.encoder_tokenizer.library='byte-level'
model.decoder_tokenizer.library='byte-level'
```


Things work as-is with tarred datasets, but you will need to re-create your datasets using the `byte-level` tokenizer class.

Currently, the following model, which is 260M params, gets within 1 BLEU (18.9) of my transformer-large run on wmt20 ja-en (19.8):

```
    model.encoder_tokenizer.library='byte-level' \
    model.decoder_tokenizer.library='byte-level' \
    model.encoder.max_sequence_length=1024 \
    model.encoder.hidden_size=1536 \
    model.encoder.inner_size=4096 \
    model.encoder.num_attention_heads=16 \
    model.encoder.attn_layer_dropout=0.1 \
    model.encoder.ffn_dropout=0.1 \
    model.encoder.num_layers=10 \
    model.encoder.pre_ln=true \
    model.decoder.max_sequence_length=1024 \
    model.decoder.hidden_size=1536 \
    model.decoder.inner_size=4096 \
    model.decoder.num_attention_heads=16 \
    model.decoder.attn_layer_dropout=0.1 \
    model.decoder.ffn_dropout=0.1 \
    model.decoder.num_layers=2 \
    model.decoder.pre_ln=true \
    model.src_language=ja \
    model.tgt_language=en \
    model.beam_size=3 \
    model.max_generation_delta=3 \
    model.label_smoothing=0.1 \
    model.optim.lr=4e-4 \
    +model.optim.sched.warmup_steps=35000 \
    ~model.optim.sched.warmup_ratio \
```


