Add 'Marshal' class

This allows values to be send across a channel in some intermediate
format. Receiving may fail, but in a way defined according to the type
class.

The intention is that programs in the protocol DSL don't have to worry
about failure - this should be dealt with in the effect handler in some
way appropriate to the communication protocol.