Cache file info access in viewengine

Move compilation and VirtualPathViewFactory to be singletons
And cache access to files.

The cache time is controlled by MVC options.

The cache is implemented in the ExpiringFileInfoCache.cs

Total improvement of about 10% in RPS
I know we did this with Antiforgery, but it seems semi odd to have a setter for replacing the entire option set. 
It might lead to scenarios where say RazorHost ctor reads and stores specifically the ViewEngineOptions into a local variable as part of the ctor and then something else replaces the reference entirely. Having it be getter only would avoid conditions like these