When the service receives a model (say, via a POST message) MVC validates it to ensure the model is in a correct state. Validation currently incurs in many allocations that can be avoided. This tackles two of them:
1. We're now caching the generic `GetEnumerator<T>` method infos generated on the fly during collection validation, and
2. We're now only initializing `ModelErrorCollection` on demand.
The first one incurs in the additional allocation of 1 long-lived dictionary object, which will grow only to the amount of `Collection<T>` types used by the model being validated. This is expected to be a small to medium number.
The second change assumes that class `ModelStateEntry` isn't thread safe, as model validation isn't multithreaded.
This resolves#4434 and #4435.