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.


Yeah, my thinking was to have the map in the `DeliveryShortMessageProcessor` be only codecs that already exist in the standard python distribution. The configurable `codec_class` can override some of these if it wants, which it does with the `ucs2` implementation it provides.

I'm ±0 on this really, it seemed a sensible thing to do yesterday but happy to stick in a custom codec here as well.

@hodgestar thoughts?