Start of Python 3 compatibility

Doctests are still failing, but the only failures are because of the differences in repr between 2 and 3. Logically, everything is passing.

Ex, failures:

```
Failed example:
    to_str(some_unicode)
Expected:
    '\xe1\x88\xb4'
Got:
    b'\xe1\x88\xb4'
...
Failed example:
    to_unicode(Exception(u'\u1234'))
Expected:
    u'\u1234'
Got:
    'ሴ'
```