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'm wondering if we want to put the JSON behind another layer so that it would be easy(er) to switch to INI or other formats? Or will that be more trouble that its worth?