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
Contexts aren't enough and dont really fit the place for deciding code generation decisions.  Not to mention some of the `TagHelper` code determines the shape of some of the contexts.

As for needing to change a sub-feature of TagHelpers it fits in with exactly how we do it today:
If you want to replace a specific portion of the html/code parsing logic you need to replace the host to replace the parser, then replace the HTML Markup Parsers, the CSharpCodeParsers and then dive into each of those to replace the individual aspects of C#/HTML.  We follow close to the same format with TagHelpers but we happen to have better structure for our classes and therefore don't need to dive anywhere near as deep.