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

First stage of our optimization is to create caching for constructors.
If you are looking for some more performance I think you can roll all this logic into Linq Expression tree and compile into a Func<IServiceProvider,object[],object> delegate. Because you know all the parameters, order and type when the class is instantiated you can write your expression tree to pass the parameters directly into the constructor. This allows you to skip the for loops and directly call the constructor rather than doing an invoke.