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



Partial fix for #878
We could add a a type constraint to `TKey` since the 2 consumers we have now have `string` keys, but seeing that it's not public API, seems crummy. Thoughts?