Incorrect usage of nn.LSTM in NeMo Models Tutorial
This is a good find, I keep forgetting TF and PT have different semantics for their RNNs. 

NeMo currently ignores nested structures (h, c) (though we plan to add this), so that will be a todo for a subsequent patch. In the diagram above, "h" corresponds to "y_t" and "c" corresponds to both (h_n, c_n), so a bit of renaming will be necessary as well.

As to the axes, we cant detach the num_directions * num_layers since it flattens out into a single axis. The axiskind most appropriate to that would probably be Channel/Dimension rather than Any. Any is a bit too generic for an RNN state axis.


Under the Neural Types section, for Case 2 LSTM [ERROR CELL], the tutorial gives the wrong reason for the `TypeError: Number of output arguments provided (2) is not as expected (1)`. Specifically, it states:
> What exactly is going on here? Well, inside our `LSTMModule` class, we declare the output types to be a single NeuralType - an `EncodedRepresentation` of shape [B, T, C].

> But the output of an LSTM layer is a tuple of two state values - the hidden state `h` and the cell state `c`!

But actually from the nn.LSTM [docs](https://pytorch.org/docs/stable/generated/torch.nn.LSTM.html) we see that ![image](https://user-images.githubusercontent.com/76540498/104661588-adb2a980-567d-11eb-9a18-6f845b6c92a0.png) it outputs a tuple `output, (h_n, c_n)` whose first element `output` contains the output features from the last layer of the LSTM for all timesteps. With `batch_first=True` this should be of the shape `B x T x C`. The second element of the tuple is again itself a tuple of the final hidden state (`h_n`) and final cell state (`c_n`). So the axes in `CorrectLSTMModule` is also wrong. Particularly, even with `batch_first=True` in the LSTM `h_n` and `c_n` are of shape `(num_layers * num_directions, batch, hidden_size)`. Since `h_n` and `c_n` are the final states there should be no Time (T) or seq_len dim in their shape. Here we are using unidirectional LSTM and representing batch with axis B and hidden_size with axis C so shape becomes `(num_layers, B, C)` not `(B, T, C)` as implemented in `CorrectLSTMModule`
![image](https://user-images.githubusercontent.com/76540498/104663013-e902a780-5680-11eb-8a9c-57f41d19d9a0.png).

Also wondering, is there an AxisKind to represent `num_layers` or `num_directions`? Couldn't find a suitable AxisKind in https://github.com/NVIDIA/NeMo/blob/main/nemo/core/neural_types/axes.py. Maybe "Any" should be used?


To give a more concrete example of the LSTM output. Let `(h_n, c_n)` be the tuple of final hidden and cell state and `y_t` be the outputs for all timestamps then

``` 
lstm = torch.nn.LSTM(1, 30, batch_first=True)
x3 = torch.rand(2, 5, 1)
# x3 shape is [batch_size x time stamps x dimension]
y_t, (h_n, c_n) = lstm(x3)
```
`y_t` is of shape ([2, 5, 30]) i.e `batch_size x time stamps x dimension`
`h_n` is of shape ([1, 2, 30]) i.e. `num_layers x batch_size x dimension`
`c_n` is of shape ([1, 2, 30]) i.e. `num_layers x batch_size x dimension`

