Add filesystem iterator variant

This adds a new variant iterator that is a raw filesystem iterator
for scanning directories from a root.  There is still more work to
do to blend this with the working directory iterator.
Make workdir iterator use filesystem iterator

This adds some hooks into the filesystem iterator so that the
workdir iterator can just become a wrapper around it.  Then we
remove most of the workdir iterator code and just have it augment
the filesystem iterator with skipping .git entries, updating the
ignore stack, and checking for submodules.
More filesystem iterator cleanup

Renamed the callback functions and made some minor rearrangements
to clean up the flow of some code.
More filesystem iterator tests

Refactors the helper function that builds a directory hierarchy
and then made use of it to try more variations on filesystem
iterator tests.
Fix uninitialized var warnings
Fix fs iterator test on case sensitive fs
Fix win64 warnings
Fix workdir iterator leak

When attempting to create a workdir iterator for a bare repo,
don't leak the iterator structure.
Merge pull request #1479 from arrbee/iterator-for-directory

Add filesystem iterator variant