change and document iterators for consistency

This change alters the design and behavior to be more
consistent with the standard library. Method Step
(returning bool and used in the for loop test) does the
work of fetching new items. Method Current doesn't
advance the iterator; it just returns the current item.

Also add tests and documentation to explicitly describe
side effects.

fixes #29
I'm not too sure if this is the right thing to do. I think it makes sense, but I'm pretty sure the iterators weren't doing it before this patch.