Use WorkflowOp (instead of -Task) for the PhysicalPlan.

This gets us one step closer to isolating MongoDB-specifics from the
rest of the system.

It has the nice benefit of cleaning up many tests and making them a bit
more resistant to changes in `physical.mongodb`. Also, one evaluator
test (expecting failure) is now impossible to hit, since we can’t get a
badly-formed `FoldLeftOp` to the evaluator.

Fixes #366.

Also:
* add some `WorkflowOp.merge` tests;
* test `WorkflowOp.finalize` & smart constructors to make up for these
  losing coverage in the planner tests; and
* eliminate dead code from PipelineOp, since much of its work has been
  moved to WorkflowOp.
Well, I was planning to leave it until after 1.0 at this point (but I’m open to changing that). I have the never-merged branch with many of the changes, so it should be quick to patch that up again. And with the new smart constructors, we don’t have to worry about the `Op`/`Op0` distinction.