Sigh, you were right, unicode breaks things.  2 requires `__repr__` to return a `str` which means we have to encode to UTF8.  3 requires `__repr__` not to return `bytes` which means we can't return the encoded version.

I've corrected it but the fix involved an inelegant conditional in `__repr__` by major version.  Can you think of a better way?