Saves are now written with a version string embedded. On load, we can inspect the version string to work out how many properties we /expect/ to get out of the file to detect broken files. There's a fallback to the "latest" total number of expected properties for when the version number gets changed above what the lookup supports.

On load, if there is a property count mismatch, we'll either refuse to load the file, or, if the user has a backup file, offer to restore it.