Cleanup and modernize the code base
I'm starting to work on adding new features, and I'd like to have the code in good shape before I start bolting things on. This series is large, and not super well organized. I've basically taken pylint and mypy and just powered through fixing warnings and errors they're pointing out. The notable thing with mypy is it requires adding type annotations to the code, which I've done. This will hopefully provide a nice clean base for adding features on.