+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 
Source(List(3, 5, 6, 7, 8)) and Source(List(3, 5, 6, 7, 8, 10)) works as expected, but not the 8, 7 order
not sure what is expected in that case, I mean the readRemaining is not sorting things either