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: use a less-specific contract and expose less:
- `IDictionary<string, TValue>` for `TagHelperOutput.Attributes` and the 4 related constructor parameters
- `IReadOnlyDictionary<string, TValue>` for this and and the other 2 `public Dictionary` properties in this PR