Modifying CompilerCache to use IFileSystem.Watch

Fixes #1708
It avoids creating an additional delegate `() => compile().Result`