Generalize plan snapshot

Im not 100% happy with `SnapshotPlannerSpec` so any suggestions to make it better would be much appreciated.
All the plan stuff should be pure. I don't think it should be ResultT at all. I will leave a large comment for discussion at the end, but I think it should be something closer to `PlanningError \/ A`.