Cache action descriptors

In order to avoid regenerating action descriptors every single request, this change adds a caching service.

The service IActionDescriptorsCollectionProvider exposes an accessor to a list + a version. To allow other services that further cache aspects of action descriptors, to be aware of changes.

The default implementation of the service does not support detection of additional action descriptors and this is left for a specific implementation of a more advanced behavior. The author of such a service is also responsible for incrementing the version in a thread safe way.

Converted all the existing tests, and added a functional test to ensure that under real live site conditions the service is called only once.

@troydai @javiercn @rynowak @loudej 
I'm intentionally using the same basic app, and testing behaviors of it. I agree there is tension here, at this point it's appropriate IMHO, but we should definitely be very specific about this.