Versioned

This is a wrapper type that is able to alter the serialization behavior, as in, it bundles a serializable object together with a version tag, and dispatches to different serialization functions, based on the bundled version tag.