The iteration over directory entries of a VFS is a bit unweildy, since it requires using a pair of llvm::vfs::directory_iterator, calling llvm::vfs::directory_iterator::increment(std::error_code &) and checking std::error_code. Currently, there are 15 instances of this pattern in the Clang codebase.
This patch simplifies iteration over directory entries by introducing new type of iterator and adding FileSystem::dir_range() function.
clang-format: please reformat the code