could an Encoder/Decoder be stateful?
Or is the same instance used for each (un)marshaling? It would be nice to
have a cache and a duplicateMsgChecker function, from the app above to
ensure transactional guarantees, and object ref substitutions during
(de)serialization, to enable durable distributed objects and promises.