V1.With_versionCreate a Data_encoding.t value which records knowledge of older versions of a given encoding as long as one can "upgrade" from an older version to the next (if upgrade is impossible one should consider that the encoding is completely different).
See the module Documented_example in "./test/versioned.ml" for a tutorial.
first_version enc records that enc is the first (known) version of the object.
next_version enc upgrade prev constructs a new version from the previous version prev and an upgrade function.