Refactor AbstractTreeIterator semantics to start on first entry
The AbstractTreeIterator implementations now start on their first
entry at construction time, instead of relying on TreeWalk to do
an initial "next()" invocation. This cleans up some of the code
and makes the iterators more consistent with each other.
In all implementations the refactoring splits out the advance
portion of next() from the entry parsing portion. This change
(along with the position semantic change) will permit us to do
reverse iteration in the future, making the iterators all able
to be bi-directional.
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>