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
rename this and three related methods to describe what they do at a high level.  can't understand `RewriteTags()` without reading every line in these four methods.
example names:
- `PushBlockBuilder()`
- `PushTagHelperBlockBuilderAndPushBlockBuilder()`
- `AddChildrenAndPopBlockBuilder()`
- `PopTagHelperBlockBuilderAddChildrenAndPopBlockBuilder()` (this one needs a comma in the name since it does three things!)

could shorten the names if pushes / pops for `_tagStack` didn't call methods for the `_blockStack`