A wrapper type that supports versioning of the inner type.
The inner type is a dynamic field of the Versioned object, and is keyed using version.
User of this type could load the inner object using corresponding type based on the version.
You can also upgrade the inner object to a new type version.
If you want to support lazy upgrade of the inner type, one caveat is that all APIs would have
to use mutable reference even if it’s a read-only API.