Add DesignTime code generation support for TagHelpers.

- We now generate a subset of the TagHelper runtime code during DesignTime. This enables users to see errors in the editor
- Added tests to validate design time code generation.
- Refactored runtime code generation tests (we now use a lot of their infrastructure for the design time pieces).

#208

/cc @dougbu 
> these could potentially be user `TagHelper`s

perhaps but this isn't the mainline scenario.  and,

> can also get multiple `TagHelper`s targeting the same HTML tag name via a single `@addtaghelper`

agreed.  thus the warning or error should occur when that directive is written, not when the user happens to use both tag helpers.