Ported from the Iterator goodie by Mario Wolczko.
Occasionally you may have a block that when evaluated can be
treated as a collection -- ie it takes another block as parameter,
then applies that to a sequence of values.
This goodie wraps the block into an object -- an iterator -- which is
part of the collection hierarchy, and therefore inherits a variety of
useful collection-related methods.