Just a bit of interface definition. No real mechanics live here, nor
should they, in all likelihood.
Internally, we're using this for some ORM-y stuff.
I still don't really like this - what about the case where an Iterator
yields some falsy value? Might mandate hasNext() on \SparkLib\Iterator
descendants. It's already provided by MongoCursor and some others.
A base class for SPL Iterators. Adds an each(), a weak sort of map(), and
the expectation of a getNext().
\SparkLib\Iterator\Wrapper is a child class that takes another iterator
and wraps its result by instantiating a given class. At the moment, we're
using it to turn arrays from Mongo into instances of a model class.