Add timestep and length in Hypothesis
State: closed | Pull request: yes

Add timestep and length for calculating timestamp

Example code for calculating timestamp:
```
@torch.no_grad()
def predict(filename):
    if type(filename) != list:
        filename = [filename]
    res = {}
    hypotheses,_ = asr_model.transcribe([str(i) for i in filename],len(filename),return_hypotheses=True)
    timesteps = []
    # start timesteps
    for idx,h in enumerate(hypotheses):
        timestep = h.timestep
        tokens = []
        time = []
        # this implementation is for bpe tokenizer since it always better than character based model. Look at Idea 3 https://thegradient.pub/towards-an-imagenet-moment-for-speech-to-text/
        for t,token in zip(timestep,h.tokens): # for each timestep and token
            if "[" in token: # token such as [CLS] [SEP] etc
                pass
            elif "##" in token: # token that is continuation of previous token
                tokens[-1] += token.replace("##","")
                time[-1] = (time[-1] + t) // 2
            else:
                tokens.append(token)
                time.append(int(t))
        duration = librosa.core.get_duration(filename=filename[idx],sr=None) # get duration in second
        mult = duration/float(h.length) # get duration for each timestep
        ttt = [{"time":round(t[1]*mult,2), "word":t[0]} for t in zip(tokens,time)]
        timesteps.append(ttt)
    return timesteps
out = predict("filename.wav")
print(json.dumps(out,indent=4))
 ```
 
 Example output
 ```
 [
    [
        {
            "time": 0.0,
            "word": "pada"
        },
        {
            "time": 0.16,
            "word": "peringkat"
        },
        {
            "time": 0.44,
            "word": "ini"
        },
        {
            "time": 1.52,
            "word": "pembukaan"
        },
        {
            "time": 2.08,
            "word": "sekolah"
        },
        {
            "time": 2.44,
            "word": "hanya"
        },
        {
            "time": 4.0,
            "word": "melibatkan"
        }
    ]
]
 ```

Thank you for the awesome PR! Some minor fixes required here and there but overall this PR is good to go.

Please run the style fix script by using `python setup.py style --scope=nemo/ --fix` at the root of the nemo repository

Thanks for the review, I learned a lot
I have made the changes

Also, it seems formatting issues are still there, please run the style fix command for the next commit.

Hmm the following error message is there - Can you set the timestep and length values to defaults of [] and 0 respectively inside of the dataclass?
```
__________________ TestASRModulesBasicTests.test_RNNTDecoder ___________________

self = <test_asr_modules.TestASRModulesBasicTests object at 0x7f51340db7b8>

    @pytest.mark.unit
    def test_RNNTDecoder(self):
        vocab = list(range(10))
        vocab = [str(x) for x in vocab]
        vocab_size = len(vocab)

        pred_config = OmegaConf.create(
            {
                '_target_': 'nemo.collections.asr.modules.RNNTDecoder',
                'prednet': {'pred_hidden': 32, 'pred_rnn_layers': 1,},
                'vocab_size': vocab_size,
                'blank_as_pad': True,
            }
        )
        prednet = modules.RNNTDecoder.from_config_dict(pred_config)

        # num params
        pred_hidden = pred_config.prednet.pred_hidden
        embed = (vocab_size + 1) * pred_hidden  # embedding with blank
        rnn = (
            2 * 4 * (pred_hidden * pred_hidden + pred_hidden)
        )  # (ih + hh) * (ifco gates) * (indim * hiddendim + bias)
        assert prednet.num_weights == (embed + rnn)

        # State initialization
        x_ = torch.zeros(4, dtype=torch.float32)
        states = prednet.initialize_state(x_)

        for state_i in states:
            assert state_i.dtype == x_.dtype
            assert state_i.device == x_.device
            assert state_i.shape[1] == len(x_)

        # Blank hypotheses test
        blank = vocab_size

>       hyp = Hypothesis(score=0.0, y_sequence=[blank])
E       TypeError: __init__() missing 2 required positional arguments: 'timestep' and 'length'
```

@khursani8 There's some other issue with the CI right now, will get back to you on this 

Thanks for this PR ! Finally, if you could update the code snippet at the top of the PR to show usage of extracting timesteps, that would help future users too, and I will add it (with reference) in a future tutorial notebook.

I have updated the code snippet