+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 
No tuples would be harmed by my proposal: this is a Function3, not a PartialFunction (where your concern would be correct).

The docs for State will have to describe how to create one, and whether that is in the class-level docs or on a method is not such a big difference. Of course Java6 will have to do it differently, Java8 can benefit from the same approach as the Scala API, and the reduction in screen pollution is even bigger there.