Adding ability to monitor file changes for PhysicalFileSystem

1. This includes the implementation & tests.
2. A modified IFileInfo interface (This will require changes to MVC repo - A PR will be sent out after this changes are approved.).
3. File system watcher turns off when there are no files to monitor and turns on when files are to be monitored.
4. Need to add a test to verify that file system watcher turns off if no files to monitor.

@Tratcher @pranavkm 
I added a little optimization to the disable file monitor case of checking the _triggerCache.Count == 0 before the lock. But checking inside the lock is necessary as well. 

For example the dictionary has 1 trigger and it is getting removed as file changed. Now `ReportChangeForMatchedEntries` removes the item from dictionary resulting in empty dictionary. If the count == 0 check is only outside lock, then we will go ahead and disable the monitor. For instance a trigger was added after `_triggerCache.Count == 0` check was made, but before the code entered the lock and modified the `EnableRaisingEvents`, we will end up accidentally disabling the monitor even though there is one trigger in it. So this check will optimize the disable case as for most common case code will not enter the `lock{}`. 

Updated the PR.