SMPP needs to have a pluggable codec class.

It is possible for MNOs to give us messages that are in an encoding that aren't in the [standard encodings](https://docs.python.org/2/library/codecs.html#standard-encodings) that Python ships with.

We have two options:

1. Register a new codec with the [codec registry](https://docs.python.org/2/library/codecs.html#codecs.register).
2. Create a pluggable codec class for SMPP that fallbacks to python's codec registry for things it knows about but provides hooks for providing other encodings.

We've chosen to go with option 2 because adding a codec to the registry introduces all sorts of potential code loading race conditions.


Possibly I'm very sleepy, but I'm a bit surprised by the encoding to ``hex``. Don't we want this to end up as some sort of odd 7-bit encoded string? I.e. if it's byte-aligned, is it wrong?