Generalize plan snapshot

Im not 100% happy with `SnapshotPlannerSpec` so any suggestions to make it better would be much appreciated.
Question for Mark - do we want/need to be more parametric about our `T`'s? This could be generic for Monad I think - is it worth declaring it as such?