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
Ahh so just looked at changing it to be the host replacement and there's 1 reason why: The host needs the list of tag helper descriptors as the test is about to run. I'd need to modify the existing test code base to understand tag helpers to get this to work which I do not want to do.  Here's what the code would look like though:

```C#
private class TagHelperRazorHost : RazorEngineHost
{
	private IEnumerable<TagHelperDescriptor> _tagHelperDescriptors;

	public TagHelperRazorHost(IEnumerable<TagHelperDescriptor> tagHelperDescriptors)
		: base(new CSharpRazorCodeLanguage())
	{
		_tagHelperDescriptors = tagHelperDescriptors;
	}

	public override ITagHelperDescriptorResolver CreateTagHelperDescriptorResolver()
	{
		return new CustomTagHelperDescriptorResolver(_tagHelperDescriptors);
	}
}
```