The iterator pattern at work: this abstract class defines a
traversal interface for any kind of aggregates data structure.
An iterator can be used when you need to do something on all
elements in the data structure, but there is no order concept.
To create a new iterator, use new_iterator in the
corresponding data structure.