Stop relying on 2to3 and use `six.py` for compatibility instead

This is a significant amount of work, but will pay off (primarily in shorter build times) in the end.