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.


I'm a little surprised there isn't an equivalent ``dcs_encode`` method here? I guess the outbound encoding path is simpler because we have more control over it?