implement type hints
The modern way to indicate the intended types of variables is by using type annotations.
Type annotations are recognized by:
- Linters
- IDEs, which will provide better suggestions
- Documentation building tools
- pytest, which will check that we provide correctly typed inputs
This is better than specifying types in docstrings, and is relevant for #27 (closed)