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
not a big deal but why extend things at this low level?  there's two different scenarios
1. override code generation for plain or buffered `string` attribute values
2. override code generation for some non-`string` attribute values e.g. those of a type special-cased in the host

I believe we don't need to support 1. and doing it confuses the common case (2.).  that is, provided extensibility one level up in `RenderRawAttributeValue()` might be better and certainly would be more specific to the cases we need in MVC.  would also potentially avoid the `Action<T>` parameters.