function ZipIterator(iterators, mismatchMode) {
	    var _this20;

	    if (mismatchMode === void 0) {
	      mismatchMode = ZipMismatchMode.FAIL;
	    }

	    _this20 = _LazyIterator13.call(this) || this;
	    _this20.iterators = iterators;
	    _this20.mismatchMode = mismatchMode;
	    _this20.count = 0;
	    _this20.currentPromise = null;
	    return _this20;
	  }
Provides a `LazyIterator` that zips together an array, dict, or nested
structure of `LazyIterator`s (and perhaps additional constants).

The underlying streams must provide elements in a consistent order such
that they correspond.

Typically, the underlying streams should have the same number of
elements. If they do not, the behavior is determined by the
`mismatchMode` argument.

The nested structure of the `iterators` argument determines the
structure of elements in the resulting iterator.

Doing this in a concurrency-safe way requires some trickery.  In
particular, we want this stream to return the elements from the
underlying streams in the correct order according to when next() was
called, even if the resulting Promises resolve in a different order.

@param iterators: An array or object containing LazyIterators at the
leaves.
@param mismatchMode: Determines what to do when one underlying iterator
is exhausted before the others.  `ZipMismatchMode.FAIL` (the default)
causes an error to be thrown in this case.  `ZipMismatchMode.SHORTEST`
causes the zipped iterator to terminate with the furst underlying
streams, so elements remaining on the longer streams are ignored.
`ZipMismatchMode.LONGEST` causes the zipped stream to continue, filling
in nulls for the exhausted streams, until all streams are exhausted.