[READY] Json map saves

This will make save backwards compatibility much less fragile (no more adding enums all over the place just to add a new terrain or furniture type) at the cost of making saves larger.  If they get out of control we can look into resurrecting one of the compressed saves PRs from the past.

This is ready to go now, please throw some saves at it and see how it goes, but I've put a good number through it and it hasn't complained a bit.

If it finds a maps/key.map file, it will take that as an indicator that it's a v12 - v19 save, and load/save every submap chunk one last time.  After that, we should never have to load/save every submap again, because the resources* are unique identifiers instead of array indices.  As a fallback though, each submap has its own version number, so if we need to we can still migrate to new versions.

*The one holdout is fields, if those are stringified we're set, until then we just need to only append to the list of fields and we'll be fine.

TODO: Nohting!
~~Handle loading legacy saves, and move the legacy loading code to savegame_legacy.~~
~~Pull out as much of the map.key infrastructure as possible without breaking legacy save loading.~~
~~test a bunch.~~