Hi Mike and Nathan,
Awesome, thanks Nathan! I will issue a PR once I figure out what other steps to take.
Mike, the main thing I want to do is get rid of our usage of six.add_metaclass. We use metaclasses mostly to "autoregister" things, so that if something is defined it sticks itself into a dictionary we can call. But, the metaclass syntax changed with Python 3, so we've had to use the compatibility layer, which is a bit ugly and kind of messes with any kind of static analysis. Getting rid of it will make things a bit cleaner.