Snapshot metadata

This isnt for merging yet, just WIP,

Bit of a slow start, but figured while I am still finding my way around the codebase i'll raise this so ppl can peek at the progress more conveniently and give me feedback as i go.
I suspect if we Change to an INI we'd rename `NewSnapshotManifest` to `JSONSnapshotManifest`, make that another case class for `SnapshotManifest` and create a New `NewSnapshotManifest` case class with the INI implementation, with `SnapshotManifest` providing the interface that handles backwards compatibility (that will either get the optional metadata from Json or from the INI file)