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
It's not necessarily double, it could be 2^n where n is the number of case-changeable characters in the filename. But I'm not worried; at worst I think you can only grief yourself.