Stop having separate concepts of FileIterator and DirectoryIterator
classes, and just have a single FileIterator that can return all files,
all directories or a filtered list of files -- this allows us to cache
all file lists even though we still support file filtering.