Model Iterators
---------------

What is a model iterator? Well, ideally, it's an iterator that performs
a prefix tree iteration on model elements. For example, if you have a
package containing three classes, the iterator would start on the package
and end with the last class contained by the package. In otherwords, the
iterator descends the containment tree, left to right through the children.

So, the question is... how do we construct a generic model iterator for
metamodels? The answer: reflection. If we know at runtime what references
are composite references, then we can limit our iteration to those objects.