Minor fixes

* refactoring of JsExprPhase that should handle bad arity, etc.
* eliminate DummyOp (which was just a placeholder for “unrooted” pipelines until I had all the merging stuff figured out)
* maintain PureOps, rather than immediately converting them to (Dummy-rooted) projects.
It’s currently a `Pure(1)` followed by a `Project("0" -> ROOT)` – we don’t yet coalesce projections on pure data to new pure data.