Add type hints.
- Add type hints/annotations to function/method/constructor parameters and return types.
- The more specific the type hints the better.
- In case where imports for type hinting cause cyclic non-terminable imports, avoid such imports and use more generic type hints.
- Suggestion for review: Maybe define a separate python file with user-defined classes and types to use for more deterministic type hints.