refactored message to decoder to be an abstract class, this allows end users to define their own message encodings
adding default props