NMT evaluation timing
This PR extends the timing measurement for NMT models, in addition to bug and performance fixes.

# Summary

* Added timing measurement of encoder, decoder, and sampling stages in eval_step.
* Added support in sliding mean - useful in cases when post processing of log is not available, and smoother timing is required.
* Fixed logging issue of log variance (missing reduction). This bug affected only MIN/VAE training.
* Improved evaluation performance by caching the loss values to be reused in translation (inside eval_step).

# Configuration

The following configuration can be used in config file to enable sliding mean over 10 steps:

```
exp_manager:
  step_timing_kwargs:
    # if positive, defines the size of a sliding window for computing mean
    buffer_size: Optional[int] = 10 # 
```

The following flag can be used in command line to enable sliding mean over 10 steps:

```
+exp_manager.step_timing_kwargs.buffer_size=10
```

# Logging

## NMT Timing Plots

The following keys will be logged for NMT models: `val_sampler_timing`, `val_decoder_timing`, `val_encoder_timing`.

![image](https://user-images.githubusercontent.com/7453913/136821312-ef4e3dc5-c67f-4faf-afc4-d820c08c667d.png)

## Sliding Mean Plots

Below is a comparison of two runs. Cyan shows timing averaged over a sliding window of 10 samples. Gold shows raw timing.

![image](https://user-images.githubusercontent.com/7453913/137145269-d36588c3-fe98-4ec7-9155-7811e70f9d81.png)
