Modifying ViewDataDictionary and ModelStateDictionary to copy on write instead of eagerly copying.



Partial fix for #878
just so you don't go too crazy, note `KeyValuePair<TKey, TValue>` is a `struct` so you don't need `[NotNull]` for this parameter or in `Add()` or `Contains()`.