Python 3 beta six

This branch uses `six` to manage some of the differences between python 2 & python 3.

I know you don't like unneeded dependencies (for good reason!), but when it comes to supporting python 2 & 3, `six` is as close to stdlib as you can get without being stdlib, and it eliminates a lot of guesswork. In addition, anyone using python 3 will almost certainly already have `six` installed already as a dependency.