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.
I've actually re-introduced a problem on `master` with my recent pivot cleanup. We're not calling `Pivot.createPivotFromSnapshot` from anywhere. Sigh. Depending on how much more work this PR needs I would very much like to fix that on `master` **ASAP**, which will require _something_ like what I have here. Suggestions welcome.