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.
Any reason for these to be private? As a general rule (lightly applied), my preference is for private only to be used to maintain not some invariant and not for code organization. If there is a good reason I can live with it.