[Design] 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
this will cause double-encoding of attribute values copied from a `TagBuilder`.  suggest making `Attributes` a readonly list and adding methods to add / replace raw or encoded attribute values.  copy constructor might assume given `Dictionary` is already encoded.