[VFS] Skip non existent files from the VFS tree

When the VFS is described through a YAML file, the real file path for a
virtual file is present in the "external-contents" field. Example:

  ...
  {
     'type': 'file',
     'name': 'a.h',
     'external-contents': '/a/b/c/a.h'
  }

Currently, when parsing umbrella directories, we use
vfs::recursive_directory_iterator to gather the header files to generate the
equivalent modules for. If the external contents for a header does not exist,
we currently are unable to build a module, since the VFS
vfs::recursive_directory_iterator will fail when it finds an entry without a
reliable real path.

Turns out that Xcode emit YAML files with real paths that do not necessarily
exist until some point in the build process. This makes umbrella module builds
to fail if YAML files are used in compiler invocation prior to such points.

Fix the issue during VFS dir iteration by skipping entries that do not contain
reliable external contents.

rdar://problem/26600868
7 files changed