WIP: FeatureReduction and Squash

Opening this up for some early eyeballing. It's not all that different from the original PR/branch. The important change is that I'm grouping by featureId, and handling multiple entities in the reduce step.

Two things I _know_ need to be fixed:

1. The reducer count calculation. Any suggestions for what is the correct/best way to calculate this?
2. Squash currently needs `SnapshotMeta`, which we don't currently have for `chord` pivots. This partly depends on what we may (or may not) need for the reduce count. It might also be better to do something once #266 is merged to avoid merge conflicts.

I haven't tried doing anything about the pure reduce functions yet, although I'm not expecting that to be too disruptive assuming everything else is mostly in the right place.
> Another TODO - I'm planning on adding a function that respects the calendar year for month/year (no reason that I haven't yet)

Added `startingDateCalendar`. I wouldn't say I'm 100% convinced that we don't just need one version. Is there anything we're worried about by using the "max days" for snapshot? If so it would be good to add that to the scaladoc. I know we briefly talked about it in the beginning, and you _did_ ask me to document the reasons but I didn't really have a good explanation.