Add `BeginRouteForm()` HTML helper (#437)

- refactor `DefaultHtmlGenerator.GenerateForm()` to support new method

- also test `Html.BeginForm()`, which was previously untested (touching on #453)
- provide a `DefaultTemplatesUtilities.GetHtmlHelper()` overload with an
  `IHtmlGenerator` parameter
- update `DefaultTemplateUtilities` to use `DefaultHttpContext`
 - stop using a mock for this purpose; provides a non-`null` `Request`

nits:
- correct XML comments
- add a few more code comments
- `DefaultTemplatesUtilities.GetHtmlHelperForViewData()` -> `...GetHtmlHelper()`
  for consistency with other overloads
double-checked and a few calls passing a `null` argument were doing the messy thing and casting as well as providing `TModel` (need only one of those, naming the parameter w/ `TModel`).

worse, VS refactored a call above in `CheckBoxReplacesUnderscoresInHtmlAttributesWithDashes()` to continue to
incorrectly call `GetHtmlHelper<TModel>(TModel model)` when passing a `ViewDataDictionary<TModel>`.  doesn't
show up except in individual commits since original line now works properly.