Add TagHelper parse tree rewriter.

- The visitor looks for TagBlock's that match registered TagHelpers and rebuilds them into TagHelperBlock's.
- Added the code generator and corresponding chunk for a TagHelperBlock.
- Added syntax tree specific objects & helper methods to create accurate tag helper structures.

#71 

**NOTE:** This does not support malformed tag helpers.  It expects all tags (that are tag helpers) are validly formed.  That fix will come with: https://github.com/aspnet/Razor/issues/104

*Also* I opened a separate test PR due to size here: #110

Issue: #71
I can grok having a constructor that doesn't call `Reset()` up front.  makes sense if that method is `virtual` and a subclass depends on values its constructor sets in its `Reset()` override.
but why make `CodeGenerator` `protected set` rather than leaving its initialization in the constructor?  I don't see any code changing this value after the `Block` is instantiated.
btw this is specific to `Block`.  a different answer for `BlockBuilder` seems fine.