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.
Merge remote-tracking branch 'upstream/master' into ready/351
remove ProjectOp.uncoalesced, and the caller

Turns out the caller was dead code.
update version in sbt
Merge remote-tracking branch 'upstream/master' into ready/351

Skipping integration tests for joins for now, because they're taking forever to fail
due to unnecessary projection under "value".
use current version number
Merge pull request #397 from mossprescott/hotfix/publish-version

use current version number in publish script
Merge pull request #392 from mossprescott/ready/351

improve handling of grouping
fix code generated for IfNull
implement date_part/Extract in JS (Fixes #380)

For use in filtering.

Not all fields currently implemented (see #399).
Merge pull request #400 from mossprescott/ready/380

implement date_part/Extract in JS; fix ifNull/Coalesce
don't rename source collections

If no temp collection is created for a query, the path to the source
collection is returned (even if the query came with a requested
destination).
Merge pull request #401 from mossprescott/hotfix/preserve-source-collections

don't rename source collections
bump version to 1.0.2-SNAPSHOT
better temp names; more efficient workflow phase (Fixes #391)

Use State in WorkflowPhase, WorkflowBuilder, WorkflowOp to generate
unique temp names (__tmp0, ...). This should allow more projectOps
to be collapsed in the future, but as of this commit the resulting
structure should be unchanged.

New, handwritten "bound" phase that evaluates each expression only
once, propagating `Let`s down the tree, and applying a bottom-up
annotation to the rest. This reduces the amount of evaluation being
done by about 30x in some cases.

Implemented some missing combinators and ops for PhaseS.
respond to PR feedback

Simplified some names and cleaned up much of the Attr-wrangling quite a bit.

Converted two more phases to use the new optimalBoundPhase.

SelectorPhase is still using the old lpBoundPhase because it needs a different
morphism (scanPara2) which the new phase cannot (yet) simulate.

Fix numerous bugs in the new optimalBoundPhase, and changed the type of the
annotation function to allow the monad to be threaded properly. In short,
The phase now maps over the result of each call immediately, so that
evaluation happens only once and then the result is used to annotate the
subexpression. In the previous commit, it was only appearing to work because it
was not properly annotating sub-nodes at all!

A few (surprisingly few) planner tests had their generated names shift a bit as
a result.
disable wartremover by default, for faster compiles (Fixes #390)
Merge pull request #412 from mossprescott/ready/390

disable wartremover by default, for faster compiles (Fixes #390)
more PR feedback
- put JSExprPhase back to the way it was
- other minor stuff
Merge pull request #409 from mossprescott/ready/391

better temp names; more efficient workflow phase (Fixes #391)