Generalize plan snapshot

Im not 100% happy with `SnapshotPlannerSpec` so any suggestions to make it better would be much appreciated.
If you are having inference problems, it would be worth adding some smart constructors to the Dataset companion. This is also related to my issue with passing the constructors around as arguments.

Something like:
```
object Dataset {
  def factset(args....): Dataset = FactsetDataset(...)
  def snapshot(args...): Dataset = ...
}
```