BugFix: TinyCache CanOperate fails if VirtualCacheFile is null

I have reversed the logic in CanOperate as the HasFileIOPermisions
requires a VirtualCacheFile.

I have also put wrappers around HostingEnvironment to facilitate
testing.

I have added a check for CanProcess eventArgs being null. We get a more
sensible excetion that way.
The .NET API accepts either and even a mix of both.