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.

This fixes a crash when an iterator is iterating over an
empty result set. In that case, we want the caller's
loop to execute zero times, not one. See issue #34.

Also add tests and documentation to explicitly describe
side effects.

fixes #29
fixes #34