This patch extends upon D41947 because the interface that was landed from that patch isn't much user-friendly.
Injecting a custom virtual file system into the tool is a dangerous operation. If the real file system (where the installed Clang's headers reside) are not mirrored, it only turns out at ClangTool::run() that something was not mounted properly. Originally, the execution of a ClangTool always used the real filesystem.
Starting with D41947, the client code setting the tool up must manually create the OverlayFS (which is, in turn, added as an OverlayFS into the tool' inner OverlayFS) containing the real system and the user's intention. I believe this logic should not be duplicated in client code with calling pushOverlay and initialisation of FileSystem objects all the time.