Tag helpers attribute code generation

- Followed the "decorate" pattern that we use throughout Razor.
- Enabled the CSharpCodeBuilder to decorate the CSharpCodeVisitor which exposes a CSharpTagHelperCodeRenderer which is indirectly used to render attribute values.
- Fixed up some existing classes that just new'd up the CSharpCodeVisitor class to instead take in the decorated version.
- Tested that we can successfully plugin our own TagHelperAttributeCodeGenerator.
- Moved some existing TagHelper test logic into its own base type to enhance code reusability.

#119
The `TagHelperRenderer` needs to have a public accessor so we can set the attribute code renderer.  If the user sets the `TagHelperRenderer` property to `null` and that results in an NRE due to them using `TagHelper`s I feel like that's fine; they were the ones who removed the tag helper renderer :smile: