code: public static <T1, T2, R> Ix<R> zip(
              Iterable<T1> source1, Iterable<T2> source2,
              IxFunction2<? super T1, ? super T2, ? extends R> zipper) {
          return new IxZip2<T1, T2, R>(nullCheck(source1, "source1 is null"),
                  nullCheck(source2, "source2 is null"), nullCheck(zipper, "zipper is null"));
      }
docs: Combines the next element from each source Iterable via a zipper function.
  <p>
  If one of the source Iterables is sorter the sequence terminates eagerly.
  <p>
  The result's iterator() doesn't support remove().
  
  @param <T1> the first source's element type
  @param <T2> the second source's element type
  @param <R> the result value type
  @param source1 the first source Iterable
  @param source2 the second source Iterable
  @param zipper the function that takes one from each source, not null
  @return the new Ix instance
  @throws NullPointerException if any of the sources or zipper is null
  @since 1.0