Should we be reusing the walk we've already setup?  Why create a new pool of revision objects when we can just reuse the one we already have?

On the other hand, a walker could dispose of object bodies, and a reset and reuse might confuse the caller because the bodies are gone.  That's actually a bug in RevWalk that we should probably address and fix there rather than forcing an entire new pool to be created for a second invocation.

Likewise, RevWalk discards the starting commits when it resets.  We probably should allow those to be retained somehow, so the same walk can be executed again without needing to maintain our own copy of the starting points (RevWalk calls them "roots" inside of itself.)

Finally, RevWalk's implementation of Iterable is probably wrong.  It only works once.  Creating a 2nd Iterator fails.  So we probably should fix RevWalk first so its iterator() method resets the walk and starts it over again.