Projects loading optimization

I noticed some CPU loading as I moved the caret around by keyboard. Profiler said that we load the current project each time the caret changes its position (and we load it twice - for Highlighting and for Renaming). 

So, I introduced a simple, never invalidated cache for `ProjectProvider`s. 

Now we must invalidate it when the a project is changed in any way. One option is to listen for file system changes, but it does not look any elegant. Maybe there's some relevant events inside VS?