Step now has .addStart(Traverser) and .addStarts(Iterator<Traverser>). Lots of places where SingleIterator existed that caused unecessary object creation. However, we can't go full .addStart(Traverser) as if you pass an iterator, we need to be lazy about it. Its a balance btween TraverserSet (greedy) and Iterator (lazy). I will be reworking ExpandableStepIterator to make it good -- current impl is weak.