Support `DisplayName` attribute, fix #532

- add `ModelMetadata.DisplayName` property
- use `DisplayNameAttribute` when it exists (in full .NET); this attribute does
  not yet exist in cloud-optimized OS
- remove incorrect override of `ModelMetadata.GetDisplayName()`, which delegates
  to a number of `ModelMetadata` properties and should not be `virtual`
- use `ModelMetadata.DisplayName` in `@Html.DisplayName()` and `@Html.Label()`;
  remove associated TODO comments
doing this check for back-compat with 5.x
unless `DisplayName` comes to cloud OS, `#if` will never go away