IteratorWrapper eliminates some boilerplate when defining an Iterator that wraps another iterator.
To use it, include this module in your iterator and make sure that the wrapped
iterator is stored in the @iterator instance variable.
Rewinds the wrapped iterator and returns self.
Invokes next on the wrapped iterator and returns stop if the given value was a Stop.
Rewinds the wrapped iterator and returns self.
Invokes next on the wrapped iterator and returns stop if
the given value was a Stop. Otherwise, returns the value.