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.
Oh, this was the other question. I'm re-using `SnapshotWritable`, but this means wasting 2 bytes on a priority we don't have. Happy to make a smaller version of the byte structure unless it's OK this way (but I'm assuming not).