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 
nit: nested / repeated conditions slow the reader down.  this could be
``` c#
  if (!string.Equals(descriptor.AssemblyName, lookupInfo.AssemblyName, StringComparison.Ordinal))
  {
    return false;
  }

  return lookupInfo.TypeName == null ||
    string.Equals(descriptor.TypeName, lookupInfo.TypeName, StringComparison.Ordinal);
```
or
``` c#
  return string.Equals(descriptor.AssemblyName, lookupInfo.AssemblyName, StringComparison.Ordinal) &&
    (lookupInfo.TypeName == null ||
    string.Equals(descriptor.TypeName, lookupInfo.TypeName, StringComparison.Ordinal));
```