Using typing protocols might help with some of the issues in #59. They can live in `circuitpython_typing`.