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



Partial fix for #878
The constructor here calls `SetModel()` and _that_ does the right job.  Please see line 186 in this file and don't change this.  Test `ModelMetadata` (which will never be `null`; get metadata for an `object` if the `ViewDataDictionary` is given a `null` model), not this property.