[Design] Add TagHelperTypeResolver.

- The `TagHelperTypeResolver` is responsible for determining the format of lookup texts used throughout the tag helper system.  By default it handles the following formats:
```
"assemblyName"
"assemblyName, #.#.#.#"
"assemblyName, #.#.#.#, specificType"
```
- It also restricts what types are considered `TagHelper`s.  In this implementation we only accept public, non-nested, non-abstract, non-generic `TagHelper`s.
- Added tests to validate the expected functionality.

#158
- why invent a new syntax?  `Assembly.AssemblyName` and `Type.AssemblyQualifiedName` formats such as "mscorlib, Version=4.0.0.0" and "System.Object, mscorlib, Version=4.0.0.0" are well known
- why require the Version in order to register a specific type?