[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 tempted to make the copy constructors _all_ `protected` and provide
- `public virtual ViewDataDictionary Clone()`
- `public virtual ViewDataDictionary Clone(object model)`
- `protected ViewDataDictionary Clone(Type declaredModelType)`
- `protected ViewDataDictionary Clone(Type declaredModelType, object model)`

`ViewDataDictionary<TModel>` would use the second two when implementing its overrides of the first two.  Note second override would likely be
- `public new ViewDataDictionary<TNewModel> Clone<TNewModel>(TNewModel model)`

This would have at least two advantages: (1) many fewer base `ViewDataDictionary` instances, meaning `TModel` would be immediately obvious and (2) no reason to provide `DeclaredModelType` or `MetadataProvider` properties (fewer objections to using `private` fields in the `Clone` methods than in copy constructors).