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. :(
@FrontierOtr  Yeh, not a big deal - basically - anything that intentionally crashes hard (and there are a few of them on the inside of the map reduce jobs) we class as a public interface and try to funnel it through the `Crash` module to at least give consistent errors (and hopefully have only one spot to add more diagnostics).