Pull out WorkflowOp merging as a separate operator

This gives us another option for testing workflow construction, which should be helpful as things continue to get more complicated.
Yes, the dependency is wrong.

Actually, I'm not sure they need to be the same names at all, and I think it might make sense to make them private in *both* classes. Weren't we at one point thinking about generating a unique name for each occurrence? I still think that would make debugging easier (but add some complexity).