Use from __future__ import annotations (almost?) everywhere?
This means we can address

> type hints are executed at module import time, which is not computationally free.

(from https://www.python.org/dev/peps/pep-0563/), as well as use the more modern syntax of Python

----

This is easy to automate, just checking there's no downsides to putting this everywhere. Should any files (probably `__init__.py`, any others?) be excluded? cc @simonjayhawkins 