Reimplement Iterator

Based in changes to the iterator specification slated for ECMAScript 6,
but extended to pass indicies through on iteration objects.

This reimplementation largely avoids using closures for iterator
instances.

Methods of iterators that return new iterators are now conjugated
differently, to avoid colliding with the variant that will produce a
plain array. For example, `zipIterator` is now `iterateZip`.

I have removed the type checks for callbacks. Any object implementing
`call` will suffice.

:warning: This commit introduces backward incompatible changes and
should await a major version.