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.
Side note, never call `foldRight` in scala code. You can call `foldr` (which is basically implemented as `reverse . foldl`) but foldRight is not stack safe.