+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 
@rkuhn @drewhk good news, the FlexiMerge implementation does what it is told to do in this test, i.e. no bug, but perhaps this OrderedMerge sample/test is just too confusing and should be replaced with something better (separate ticket)?

This is what happens:

    # getFirstElement InputPort(0) 3, reference=3
    # readUntilLarger InputPort(1) 1 <= 3, emit 1
    # readUntilLarger InputPort(1) 2 <= 3, emit 2
    # readUntilLarger InputPort(1) 4 > 3, emit 3, reference=4
    # readUntilLarger InputPort(0) 5 > 4, emit 4, reference=5
    # readUntilLarger InputPort(1) 9 > 5, emit 5, reference=9
    # emitOtherOnClose refererence: 9
    # readRemaining InputPort(0) 6, emit 6
    # readRemaining InputPort(0) 8, emit 8
    # readRemaining InputPort(0) 7, emit 7

When reading element 5, which is larger than the reference 4, it will switch to the other input, and read 9, which is larger than then reference 5, i.e. when reading 9 there is no knowledge that there is a 6 pending in the other stream.