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.
Looking over the rest of this, I am not convinced there needs to be two types here, rather than just one type with two ways to construct it, is there any benefit to keeping the old v new split in this datatype?