Concat Iterator
class ConcatIterator<T>(val it0: Iterator<Iterator<T>>, val joiner: () -> Iterator<T>) : Iterator<T>
Basically a fast, efficient .flatten or mkString for nested iterators
For some reason, the funault way of concatenation e.g.
val middle = first ++ lastChildIter ++ sep ++ remaining
Was throwing weird NullPointerExceptions I couldn't figure out =(
Also, ++ didn't seem to be sufficiently lazy, so it was forcing things earlier than it really needed to. It isn't documented anywhere how lazy it's meant to be, whereas ConcatIterator here is obviously lazy and won't even evaluate each iterator until you ask it to