Returns an iterator over N elements of the iterator at a time.
The chunks do not overlap. If N does not divide the length of the iterator, then the last up to N-1 elements will
be omitted and can be retrieved from the .intoRemainder() function of the iterator.
An iterator which is a "clone" of the original iterator. Iterating through the original or the clone will not affect the other.
Note: Do not modify the original collection the original Iterable is based on while iterating.
Explanation:
Since Dart Iterators cannot be copied,
Clone replaces the underlying iterator from the Iter provided in the constructor with itself and
collects any first calls to moveNext from any derived iterator.
Due to this, modifications of the original iterable may have
unintentional behavior on the cloned iterator. i.e. the first encounter of an object during iteration will be the one
seen by the derived Iter and all other subsequent Clones.
Therefore if creating a Clone do not modify the original
collection the passed in Iter is based on.