Fix bug where directory scanning would fail on invalid symlinks.

If a directory symlink points to a directory that has been deleted, we get a ERROR_PATH_NOT_FOUND error. This is similar to an ERROR_FILE_NOT_FOUND, so we skip entries with these errors.
Invalidate cache more aggressively to avoid stale cache situations.

* Given "project.chromium-project" files can be changed, added and deleted and that it is somewhat tricky to validate in all cases we pickup the latest changes, any change to these files results in a "recompute the world" situation.

* Also, whenever a file register/unregister event occurs, we invalidate the project provider caches.
Fix bug related to wildcard matching

* We did not properly support "foo/*/bar" patterns.
Fix more corner cases of path pattern matching.
Format comments.
Move "ReadFileNulTerminated" to IFileSystem.
Move GetDirectoryEntries to IFileSystem.
Move more calls from Win32.Files.Native to IFileSystem.
Fix log message
Batch processing of file registration/unregistration events.

Registering (or Unregistering) a file takes a non trivial amount of CPU and Disk I/O time on the server process, due to cache invalidation, and potential to have to recompute the world. By batching those operations, and flushing them in a single operation, we spare lots of cycles on the server. This is useful, for example, when the user closes a lots of files from the Visual Studio editor (unregister), or when the user opens a lot of files (through a large refactoring or find/replace in files).
Move IDateTimeProvider to VsChromium.Core.
Display timing values in TaskQueue.
Add merging of tasks with identical ID in ITaskQueue.cs

This is to avoid having many items in the queue when not necessary.
Merge ComputeNewState and GC tasks using task ids.

* Refactor ITaskQueue.Enqueue to use TaskId abstraction.
Add option to not follow symlinks when traversing directories.
Follow symlinks by default.

* This is to make the default behavior backward compatible.
* There should be an option to override the default behavior.
Code cleanup, introduce experimental cache for file contents.

* The cache is not activated by default. The idea is to allow sharing memory when reading file contents in the case there are many files with the same contents.
Expose file attributes when enumerating children files and directories.

* This should allow detecting symlinks, etc. from calling code.
Expose file attributes up the stack. Simplify child entries enumeration code.
Add option to include or exclude entries in symlinks folder for various search features.