Decompose & coalesce MapReduceOps.

`MapReduceOp` has been replaced by `MapOp`, `FlatMapOp` and `ReduceOp`,
which are more atomic and composable. This also makes the `coalesce` and
`crush` methods on those operations more aggressive than the ones on
`MapReduceOp` were.

Fixes #271.

Also,

* fix a bug in `>>>` where it didn’t maintain the `base` properly and
* add integration tests for various map/reduce queries.
Nope. That’s for the fixed-point version of WorkflowOp, which I have in its own branch, so I’ll delete this.