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)

Ok. you sucked me in. Personal opinion, I don't care for things like proactively wrapping in an ROC. The api already says *don't mutate this*. Private reflection still exists, and anyone determined enough will successfully shoot themselves in the foot.

That said I don't think we need to change it if it's consistent with what other code here is doing.

@dougbu is the ordering part of this item? Seems like a good candidate for a follow up. I'm not familiar with modelmetata so I don't know where order comes from - I assume it's an opt-in mechanism for the complex-object templates?