Convert ProjectOp and UnwindOp to map/reduce ops.

* no longer set the base to `ExprVar` when creating Map and
  ReduceOps. This is now handled when crushing to a task (fixes #326)
* `FoldLeftOp` now handles patching each of its sources when necessary, rather than expecting the creator to do it (projecting into `value` for the first one, and potentially adding a ReduceOp on the others)
* `crush` now tracks the `base` as it goes, so it can patch operations
  after `MapReduceTask`s are created (this is helpful for #287)
* `mangle` is a WorkflowOp => WorkflowOp optimizer that operates after
  the workflow is completed (fixes #348)
* Added a private `FoldLeftOp0` that is used to indicate that a
  `FoldLeftOp` has been properly patched –– this is not ideal.
Enable two now-working integration tests.