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
not a huge fan of data-driven tests (which this sort of mimics) since it's less clear what each thing is testing. Can we break up into multiple tests please?