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
starting to understand -- I think.  from what you've said, `<div/>` leads to a `TagBlock` with two children and `<div id="identifier"/>` one with three children.  in the second case, `Skip(1)` returns a collection containing `{ "id=\"identifier\", "/>" }`.  you then want to `Take()` a single child -- the `"id=\"identifier\"` member i.e. `Take(1)`, `Take(3 - 2)`, or `Take(tagBlockChildCount - 2)`.
might help the next reader if you mention the `-2` accounts for both the start and end tags.