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 
Is the `Version` feature relevant to this PR? Without seeing how it's used it's difficult to evaluate the design.