+str #16077 implement Zip and friends for javadsl

This PR will contain more commits - for now it's just the Zip operation but wanted to show/get-early feedback on the method I used to not duplicate the implementation while being able to emit java Pairs or Tuple2s.  

Refs #16077
isn't this adding more boilerplate than having a simple `match` here?
a `match` would have the nice side effect that a javadsl.Zip can be connected to a scaladsl.Unzip