Add @addtaghelper directive. 

- Also added some infrastructure pieces for it such as the ITagHelperDescriptorResolver and the default implementation TagHelperDescriptorResolver which will be filled out in a later commit.
- Reworked some extensibility points to allow accessibility of the descriptor resolvers per offline discussions.
- Fixed existing tests to work with new RazorParser.
- Validated directive syntax tree creation, errors and code generation.

#111
dislike fact test code (as well as hosts and users) are no longer able to push `TagHelperDescriptor`s into Razor w/o at least one `@addtaghelper` directive.  I'd prefer to see an approach that starts with a set of tag helpers the host (test code in this case) provides and _extends_ that when the `@addtaghelper` is used.
in particular
- other hosts might start with an empty set of `TagHelperDescriptor`s
- some other host may always start with a set of default `TagHelperDescriptor`s
- MVC host could either start with its default set or also use an empty set
- most of the test code above would start with 3 or so `TagHelperDescriptor`s but `CSharpDirectivesTest` would start with the empty set.  then a fair number of test code changes above could / should be reverted.