improve handling of grouping

Eliminated the `groupBy` param in WorkflowBuilder. GroupOps are now
created immediately, then rewritten in reduce. Unwinds are introduced
when needed (squash, build, before sorting, etc.) (Fixes #230; Fixes #351)

A proper merge for GroupOps, which renames all the values on both
sides. Several fixes to other merge cases.

New structure for OrderBy in the logical plan, which allows the planner
to avoid constucting any constants for asc/desc.

Coalesce ProjectOp after GroupOp and GroupOp/UnwindOp, and collect
smaller values when possible by moving fieldProjects into the groupop.
What about replacing this with something like
```scala
projectOp(Reshape.EmptyArr.setAll(grouped.value.map {
   case (f, v) => (f, -\/(v))
 }))(src)
```
that way the ProjectOp is only created once, and `uncoalesced` can go away.