Add `[HiddenInput]` and `ModelMetadata.HideSurroundingHtml`

Issue #843 
- address related TODO items
- add missing validation messages to `@Html.Editor()` (TODO that wasn't tracked here)
- sort `ModelMetadata.Properties` as MVC 5.2 does (part of #964)

It prevents casting to a `IList<T>` and mucking with the stored properties.  But perhaps the MVC 5.2 code was Just Wrong(tm).  @Eilon any thoughts on whether the MVC 5.2 code was wrong or right?