Abstract away some types

String and integer types have changed in python 3. In 2.x, the 'str' type is a
string of bytes, and the 'unicode' type is a string of text. In 3.x, the
'bytes' type has replaced the old 'str', and 'str' has replaced 'unicode'. The
six library has abstractions for these that we can use while we're trying to
support both.

Additionally, 3.x has merged the 'int' and 'long' types, so there's a similar
abstraction for that.

Testing done: Ran unit tests.
Reviewed at https://reviews.reviewboard.org/r/4906/