Modifying CompilerCache to use IFileSystem.Watch

Fixes #1708
Are we concerned about cases where file watcher events don't work well. Remote shares for instance? It looks from this design like file-watcher is the only method for invalidation.