use DistinctBy when synthetic projections are present
- change Proj to a sealed trait with three case classes
- compile to DistinctBy only when necessary, otherwise Distinct as before
- merge Project on left or right with source equal to the other worflowop
respond to PR feedback

Remove Proj.Synthetic; instead, annotated the introduced projections with a
Synthetic annotation. Lots of ensuing fallout, resulting in slightly easier
to read composition of AST analyses.

Some minor cleanup.
go back to standard Arrow nomenclature (first, second)
Merge pull request #363 from mossprescott/ready/distinct-by

Implement DistinctBy
fix commit identification
Merge pull request #373 from mossprescott/ready/publish-script

fix commit identification
Merge remote-tracking branch 'upstream/master' into ready/348-project-to-map

Conflicts:
	src/test/scala/slamdata/engine/physical/mongodb/planner.scala