Split WorkflowBuilder into a number of case classes:

* CollectionBuilder – basically the same as the old WorkflowBuilder;
* ValueBuilder – holds a literal;
* ExprBuilder – holds some expression;
* DocBuilder – holds a flat projection; and
* GroupBuilder – holds some grouped structure – can be an expression, an
  accumulator (`GroupOp`), or a projection.

Also:

* ensure that we run `sbt` from the top of the repo in the `ready` script;
* fixes issue #403 (order of projections matters);
* fixes issue #405 (group by constant);
* fix a matcher that reversed the expected/actual sides in the diff;
* take `GroupOp` out of the `ExprOp` hierarchy;
* get rid of a broken Workflow.merge case;
* fix typers for distinct[By];
* fix “plan simple constant example 1” (prev. pending test);
* fix “plan complex group by with sorting and limiting” (prev. pending test);
* remove dead code (`FieldProject`) from SchemaChange;
* add lots of cases where WorkflowBuilder errors if we can identify a
  bad query statically;
* fail `ArrayLength` if called with a non-1 dimension;
* clean up some FIXMEs and TODOs (Or at least associate with issues when
  possible); and
* add a rewriteRefs helper function.

That probably misses a bunch, but it’s what I managed to catch in commit
messages along the way.
As in, some of the cases explicitly become errors here, as opposed to trying to merge the sources and ending up with silly LeftFolds. For example, GroupBuilders with non-matching keys.

My simplified workflow merge would refuse to merge many of the same cases, but it seems silly to do toCollectionBuilder only to produce something non-mergable, so maybe it makes more sense to catch all the error cases here and merge only sources that we know are mergable.

Like I said, these are subtleties that we can continue to refine after this PR.