Add TagHelperRunner for TagHelper runtime.

- The TagHelperRunner is responsible for calling into the process methods of the TagHelpers.
- This involved adding the following core classes: TagHelper, TagHelperExecutionContext, TagHelperOutput, TagHelperContext.  All of which aid in running TagHelpers.
- Tested TagHelperRunner, TagHelperOutput and TagHelperExecutionContext.

#154
nit: suggest a follow-up issue to decide if propagating failure from one `ITagHelper` in the list is what we want.  this is probably correct because the `ITagHelper` may have done some updates to the `TagHelperOutput` when it throws and left that object in an unexpected state.  but we should still be explicit about the `Exception` handling here.