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
- this method needs comments explaining what's going on.  I _think_ it throws away the previous builder because we're no longer dealing with its children i.e. a tag with no attributes (children) creates, pushes, and immediately throws a builder away.  then there's an odd special case implying you don't trust push / pop to be correctly balanced.
- how could the `Stack` get messed up?  why is using the last-popped builder (which only works one time) sufficient to recover?