libcommon: Extracted SavedSessionRepository from SaveSlots
Refactor|libcommon|SavedSessionRepository: Require that a map URI is always specified when forming file paths
libdeng2|SavedSession|SavedSessionRepository: Moved the saved session repository into libdeng2, revised metadata

Saved session metadata is now represented with de::Record and the game
rules are converted to/from this representation as needed when a saved
session is written/read.

ResourceSystem owns the repository (which in turn has ownership of the
saved sessions).

While the code builds without error it most certainly does not yet work.
There is still much to be done here:

- Saved sessions are not available in Ring Zero because reading of the
metadata currently depends on the game state reader(s) which are only
available when a game is loaded.
- Existing savegames are not found because the file extension (and, in
Hexen's case the /runtime subdirectory) is not known.
- SavedSession assumes that saved state is split into multiple files,
with the metadata and game state separated from the map state(s), which
use additional files (similar to Hexen).

TODO: Extract vanilla game state interpretation into a new command line
app which simply converts the given file set into a new savegame format
supported by this system.
TODO: Split the serialized map state for Doom/Heretic savegames into
separate files and utilize a common engine-side logic for reading the
metadata from the game state file.