[Design] Rework `ViewDataDictionary` constructors to ensure `ModelMetadata` is ne...

...ver `null`

- `ViewDataDictionary<TModel>` constructors now pass `typeof(TModel)` to base constructors
- remove `ViewDataDictionary<TModel>.ModelMetadata` override
- add more doc comments

nits:
- change `RazorPageActivator` to pass current `ModelStateDictionary`
- change 2 other `ViewDataDictionary` copy constructor calls to avoid
  uselessly copying `Model` and related information from source
- make a few `ViewDataDictionary` properties get-only
I'm fine w/o `Clone()`, especially if nobody objects to using `private` fields in copy constructors (feedback someone provided about the existing `ViewDataDictionary` copy constructors).  reason `#1` is relatively minor -- would mostly affect debugging experience.

that said, here's one place a renamed variant of `Clone()` might simplify our code: we change the `ViewDataDictionary<TModel>` type in `RazorPageActivator.CreateViewDataDictionary()` as follows:
``` c#
  // Create ViewDataDictionary<TModel>(ViewDataDictionary).
  return (ViewDataDictionary)_typeActivator.CreateInstance(
    context.HttpContext.RequestServices,
    activationInfo.ViewDataDictionaryType,
    context.ViewData);
```
could instead be:
``` c#
  return context.ViewData.CloneSomeBits(activationInfo.ViewDataDictionaryType);
```