Use `mypy` for type checking
**Is your feature request related to a problem? Please describe.**

In many places in NeMo, Python type annotations are used.
Since type annotations are not checked, there are some cases where annotations are incorrect or not precise (e.g., using one type when some union is really used).

**Describe the solution you'd like**

Add `mypy` type checking support. 

**Main principle:** do not require types, but if types are provided, check (require) correctness.

- firstly, add a minimal PR that doesn't affect existing code (except 2 lines, since duplicated type annotations are critical errors for mypy)
- provide PRs one-by-one to fix some of the errors to improve code quality, removing the error types from ignore list.

**Describe alternatives you've considered**

[Pyre](https://github.com/facebook/pyre-check) also can be considered as an alternative, but `mypy` is usually used as a default choice.

**Additional context**

...
