Python 3 compatibility

We used six for compatibility and removed all the decoding/encoding stuff as well as tests for it. It made compatibility a whole lot harder first and foremost but it also doesn't add anything to the modern web. If we assume unicode with utf-8 (an assumption that Python 3 makes anyway) then we don't even need the different encodings. All in all, we think it's reasonable to assume that we feed unicode to this module at all times instead of dealing with it on a one-to-one basis.
This cannot be removed because the resulting value is passed to urlencode(), which should only receive bytestrings, not unicode strings which could contain non-ASCII characters.

You suggest in a comment that we let users of this library deal with it, but:
# Developers using this library would have to convert their users' input to a UTF-8 decoded bytestring, each time they call this method. In my opinion, that's unnecessary hassle that we can easily avoid.
# That would be a backwards incompatible change. And unless we absolutely have to do it, I'd rather avoid such changes because they'll just annoy developers. Everybody using this library would have to update their code.

The call to six.u() doesn't really have any effect. The input already is unicode.