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

First stage of our optimization is to create caching for constructors.
The problem isn't that TryGetValue might return false twice. The problem is that [Dictionary](http://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx#threadSafetyToggle) is not designed to be thread-safe for anything other than simultaneous reads. Unfortunately, this code as is allows for more than just simultaneous reads; it allows for a simultaneous calls to Add and TryGetValue.

Accessing the Dictionary using TryGetValue [can and will throw NullReferenceExceptions](http://stackoverflow.com/questions/6738634/is-this-non-locked-trygetvalue-dictionary-access-thread-safe#answer-6739013) if there are non-synchronized writes.