Messaging caller specified object mapper

Open up the ```PublisherService``` for caller specified message serializer. The purpose of doing this is that
the caller may have custom written serialization modules/configurations added to some object mapper (ex: the DropWizard framework provide such a configured object mapper) and the caller may  want to use when publishing messages.

Changes:
* Rename the old ```MessageSerializer``` to ```DefaultMessageSerializer```
 as it only consist of defaults in terms of serialization
 configuration. 
* Add interface ```MessageSerializer``` which specify the contract
  for the caller to obey when implementing custom message serializers.
* Update publisher service test.
* Cleanup of ```PublisherService``` 
* Bump version to 1.0.22 as this break backward compatibility due to change of ```MessageSerializer``` from class to inteface.

Ping @xiaodong-izettle or @oskarwiksten 
I would like to add an ```anyEmpty(..)``` check here and throw ```IllegalArgumentException``` if any of the arguments are empty, as the publisher service cannot (?) work with any of them being empty. As it is today an error will be thrown upon posting the message, but the cause of error originates from publisher initialization. What do you think about that?