+str #15079 Add flexible merge

Still only a prototype, but would be great with a round of feedback for tomorrow's work.

I tried the "return next behavior" approach (see savepoint1 if you are interested), but that was a dead end. We want to allow return of behavior with new input and output types, e.g. Zip, and I couldn't get that to work without explosion of types. Reverted back to become.

// cc @drewhk @sirthias 
to extend on the other comment above, this could be called StrictRoundRobin, since it never skips an input while cycling but waits on it instead (closed inputs are skipped though). The fair merge above is a non-strict round-robin (skips currently unavailable inputs).