First pass at Snapshot
Snapshot tests added

seems to work