Update the Decoder to work with arbitrary Readers
Add support for serializing enums

The format for enums is [variant-name, args*]. The length
of the array is currently is unused.