Support writing older model versions

When a new model version is introduced, anything using the new code starts writing the new version. However, anything using the old code can't yet read the new version. We need a way to write old versions of models while still reading new versions to avoid deploy-time issues with different workers using different model versions.

A possible mechanism for this is to add "back migrations" that can be applied at write time the same way migrations are applied at read time. We can then configure the manager to write particular models at a particular version while still using the newest version internally.