Add ability to resolve all TagHelperDescriptors with one method call - DTH Communication Part 2

*This PR consists of several different aspects entailed by #214. It essentially covers bullet points 4-5.*

Add ability to resolve all `TagHelperDescriptor`s with one method call.
- Modified the `AddOrRemoveTagHelperSpanVisitor` to no longer manage `TagHelperDescriptor`s found in the system. Instead it now manages `TagHelperDirectiveDescriptor`s which are then used to resolve `TagHelperDescriptor`s.
- Changed the signature of `ITagHelperDescriptorResolver` to take in a `TagHelperResolutionContext` which will allow us to pass more information without breaking tooling.
- `TagHelperDescriptorResolver` now resolves all `TagHelperDescriptor`s at once and manages descriptors found in the system based on values on the provided `TagHelperDirectiveDescriptor`s.

Modify tests to use new `ITagHelperDescriptorResolver` signature.
- Updated all of the tests to use the new `ITagHelperDescriptorResolver` signature so instead of passing strings they now construct `TagHelperDescriptorResolutionContext`s.
- Removed several tests from the `AddOrRemoveTagHelperSpanVisitorTest`s. This was due to the change in responsibility of managing the found `TagHelperDescriptor`s; the `TagHelperDescriptorResolver` now does this.
- Added several new tests to verify the `TagHelperDescriptorResolver` manages resolved `TagHelperDescriptor`s based on the given `TagHelperDirectiveDescriptor`s.

#214

Part 1 PR: #218

/cc @yishaigalatzer @dougbu @pranavkm 
Changed it from `// Internal for testing, don't want to only use ITagHelper types.` based on your feedback last iteration.

The purpose of the internal is so we can remove the restriction of `TagHelper` types since the rest of the resolving system doesn't rely on them inheriting from `ITagHelper`. The tests that use it are the ones that rely on the `string` `TagHelper` piece to test multiple assemblies.