code: public final static <T, S, R> Stream<R> zipSequence(final Stream<T> stream, final Stream<? extends S> second,
              final BiFunction<? super T, ? super S, ? extends R> zipper) {
          final Iterator<T> left = stream.iterator();
          final Iterator<? extends S> right = second.iterator();
          return Streams.stream(new Iterator<R>() {
  
              @Override
              public boolean hasNext() {
                  return left.hasNext() && right.hasNext();
              }
  
              @Override
              public R next() {
                  return zipper.apply(left.next(), right.next());
              }
  
          });
  
      }
docs: Generic zip function. E.g. Zipping a Stream and a Sequence
  
  <pre>
  {@code
  Stream<List<Integer>> zipped = Streams.zip(Stream.of(1,2,3)
  ,ReactiveSeq.of(2,3,4),
  (a,b) -> Arrays.asList(a,b));
  
  
  List<Integer> zip = zipped.collect(CyclopsCollectors.toList()).getValue(1);
  assertThat(zip.getValue(0),equalTo(2));
  assertThat(zip.getValue(1),equalTo(3));
  }
  </pre>
  @param second
  Monad to zip with
  @param zipper
  Zipping function
  @return Stream zipping two Monads