WIP: Reducageddon

My current WIP - with about 1/2 of the expressions needed. I wanted to see how far I can get before running into walls so I could extend the API.

Problems and things to look for in particular:

1. The `@specialization`. It's perched on a knife-edge, but may be OK in the early stages while we sort out the algorithms and keep our sanity. Is there a better way?
2. The `ReductionFold` that need the dates have a different trait. I _really_ wanted to just compose something there, but I think I've dug too much of a hole.
3. What should we do with `KeyValue` in terms of performance?
4. Related to `KeyValue` I've put TODOs on a few of the Folders that are using `Set/Map` (I didn't even try to do anything clever, partly because I ran out of time).
5. `sum_by` is just plain wrong - I need to handle two struct fields (one for the key, one for the count), which breaks the mold of everything else I've done.

Sorry in advance. :(
>Any reason this doesn't use ReductionFold?
> I guess because you don't care about the fact value, only the date?

Yeah. The split between the different `Reduction` types is not perfect and the moment, and it will have to change when I do a second pass after this PR (from discussion with Mark).