1) Improve type safety wrt to FullPathName/RelativePathName
2) Start implementing cache validation for configuration file changes.
Various code changes

* Use ITaskQueue in SearchEngine to ensure sequential execution of events. This fixes a problem where the search engine database would contain data for a full enlistment when the last file of the enlistment is closed during the file content load operation. The reason is that the last file removal event was starting and finishing before the file reload operation was done. We would essentially build an empty state very quickly, and then replace it by the full state computed from a former (obsolete) event.

* Use RelativePathName in more locations

* Add explicit GC call from done recomputing a new world. THis allows prompt release of GC heap *and* (more importantly) native heap through orphaned SafeHeapBlockHandle instances.
Couple of code changes

* More use of RelativePathName.cs

* Refactor IOperationProcessor to simplify and remove usage of generics + constraints.
Rename "RelativePathName" to "RelativePath".
Rename "FullPathName" to "FullPath".
Add "IFileSystem" component

Replace FullPath.DirectoryExists usages with IFileSystem.DirectoryExist.
Replace "FullPath.FileExits" usages with "IFileSystem.FileExists"
Move files around, rename namespaces.
Minor refactoring.