SingleSourceOp
coalesce all ops when they're constructed

- eliminate the public coalesce methods
- introduce `make` methods on each companion obj, with the most precise
type
clean up unneeded reparenting