Activator optimization: first stage - cache constructor and parameter routing info

First stage of our optimization is to create caching for constructors.
You would have to put a lock around the reads too since it's callable concurrently. At which point a `ConcurrentDictionary` is much easier to use.