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 
This service is using the anti pattern of getting services from the service provider. The intent here is that the nested provider manager is transient and can get recycled after this code runs. We are only left with the collection of actiondescriptors. @loudej This was the critical detail we discussed yesterday