The naming convention is that load and save functions either load
the given file, replace the state with it, and set the SaveFile, or save
the current state and set the SaveFile. read and write functions
are lower level and either read the file and return the state, or write the
given state, without messing with the SaveFile.

Given a path, which is either a file or a directory, try to figure out
what to load. Saves can be either a plain saved state, or a directory
containing either a git repo save.git, or a state save.state. If
both are present, the git repo is preferred.