+str #16077 implement Zip for javadsl, while reusing all impl

The idea is very much CanBuildFrom inspired - to separate the "make a tuple" so that it's supplied from
the outside - this is what `ZipAs` is. In the Ast node we provide an
implementation on how to zip these elements - since Asts are built in
the scaladsl2 or javadsl, we have have proper places to make this
decision.