Module Stream defines an interface for external iterators. A stream
can be seen as an iterator on a sequence of objects x1, ..., xn. The
state of the stream is uniquely determined by the following methods:
at_beginning?, at_end?, current, and peek. State changes are done
with the following operations: set_to_begin, set_to_end, forward, and
backward.