An JoinedIterator is an Iterator that wraps a number of Iterators.
This class makes multiple iterators look like one to the caller.
When any method from the Iterator interface is called, the JoinedIterator
will delegate to a single underlying Iterator. The JoinedIterator will
invoke the Iterators in sequence until all Iterators are exhausted.