Sema: Clean up @_specialize diagnostics
Instead of looking at the requirements before passing them off to
the GSB, let's look at the difference between the final signature
and the original signature.
This makes the checks more accurate, for example we want to
detect that 'E' was specialized in the below:
@_specialize(where S == Set<String>)
public func takesSequenceAndElement<S, E>(_: S, _: E)
where S : Sequence, E == S.Element {}