This change solves a blocker for an upcoming drop of Version.file field:
calculating Extension.latest_version relied on having VersionFiles already
populated, but it was triggered on Version.save(), which happens before the
cross table could be populated.
One functional change is that a Version object is now created in
NewVersionView, immediately after the File is saved, and not in
NewVersionFinalizeView, as before.
Tests are rewritten to require only FileFactory, the Extension and Version
objects are created as if it happens in the rest of production code.
This loses a bit on the ergonomics of factories, but overall makes the state of
test objects more consistent, often simplifying the test code.