Fix some minor bugs, and Python 3 compatibility

use six.integer_types since Python 3 doesn't have `long`
use sys.maxsize since sys.maxint doesn't exist in Python 3 (they are identical on most systems)... consider using something like itertools.count here
remove __slots__ from Adapter, with __slots__ python 3 forces objects to be immutable which was not desired (_encode/_decode cannot be modified). __slots__ is unlikely to have a significant performance impact since there won't be that many adapters.
add parens to print
in python3 `dict.keys()` returns a DictView iterator object not a list so it cannot be sorted in place. Hrm, this will copy the list on Python 2 though.

default None in Adapter should not overload subclasses _encode and _decode, check to see if _encode/_decode exist before overwriting them.

One style change `x if x else default` changed to `x or default` which is more idiomatic