SMPP transport message processing refactoring

This comes out of a discussion around #676. Some MNOs specify different fields which carry differing, sometimes opposing, bits of information with regard to the message and specifically session information when dealing with USSD.

Currently our SMPP transport implementation has a lot of branching to deal with these differences. The proposal is to go with a config switch that specifies a class that is to be used when processing messages, much like how the routers work. The class would allow MNO specific implementations for message handling without littering those details all over the rest of the SMPP implementation.