reverse selector operators when needed (Fixes #402)

Also fixed cases `where ‘abc’ ~ city` to give an “unsupported plan”
error  instead of resulting in errors from Mongo (that is, if you can
slip them past the type checker)
Merge remote-tracking branch 'upstream/master' into ready/402
Merge pull request #415 from mossprescott/ready/402

reverse selector operators when needed (Fixes #402)
Convert WorkflowOp to Fixplate.

Partial fix for #35.

The main practical benefit at the moment is that it allows us to unify
Workflows and Pipelines.

There is a bunch of renaming:

* WorkflowOp                           → WorkflowF
* Term[WorkflowOp]                     → Workflow
* Term[WorkflowOp] => Term[WorkflowOp] → WorkflowOp
* WorkflowOp.workflow                  → Workflow.task
* someOp                               → $some

Also,

* `Workflow` case class constructors are now non-private, for the `Traverse`
  impl as well as for `deleteUnusedFields` and `rewrite` (which currently needs
  to return the same type that was given to it, not a Term) and
* makes IdHandling a bit more strict (but makes one property test hard
  to implement correctly, so it’s marked pending).
Merge remote-tracking branch 'upstream/master' into ready/fixplate-WorkflowOp

Conflicts:
	src/main/scala/slamdata/engine/physical/mongodb/planner.scala
	src/main/scala/slamdata/engine/physical/mongodb/workflowbuilder.scala
	src/main/scala/slamdata/engine/physical/mongodb/workflowop.scala
	src/test/scala/slamdata/engine/physical/mongodb/planner.scala
	src/test/scala/slamdata/engine/physical/mongodb/workflowbuilder.scala
	src/test/scala/slamdata/engine/physical/mongodb/workflowop.scala
Remove dead code that got re-introduced when I resolved merge conflicts.
Merge pull request #420 from sellout/ready/fixplate-WorkflowOp

Convert WorkflowOp to Fixplate.