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.
Merge remote-tracking branch 'upstream/master' into ready/271-coalesce-MapReduceOp
Eliminate unused Traverse impl.
Merge pull request #336 from sellout/ready/271-coalesce-MapReduceOp

Decompose & coalesce MapReduceOps.