#5 custom payload support

#5 Adds custom payload support

docs need to be updated still.
Does this need to be protected or can it be just made public?  Can we provide a default implementation that returns the payload class?