Coalesce WorflowOps when they're constructed

- eliminate the public coalesce methods
- introduce `make` methods on each companion obj, with the most precise
type, and aliases like `pureOp`
- convert almost everything to use `chain()`

Also:
- new trait SingleSourceOp for chainable ops