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.
Yeach thats another wquestion i had, like if we keep adding more to the metadata and eventually the date and commit order is only a tiny part of it, does it really make sense to encode it into the semantics of the type with the instance