[ty] Filter protocol overloads by receiver constraints
Summary
A callable protocol can select overloads through explicit receiver annotations:
class Callback(Protocol[*P]):
@overload
def __call__(self: Callback[()]) -> Any: ...
@overload
def __call__(self: Callback[V], value: V, /) -> Any: ...
Prior to this change, we discarded the receiver parameters while constructing the protocol interface, before using them to determine which overloads applied. Callback[str] therefore appeared to require both () -> Any and (str, /) -> Any, incorrectly rejecting a compatible callback such as lambda value: value.
This change represents explicit receiver checks as conditions on the bound signatures. Before applying the ordinary callable overload and ParamSpec relation, we remove only those target overloads whose receiver condition is impossible. Retained conditions participate in the subsequent signature relation, so receiver type-variable bounds are solved together with the visible parameters instead of being discarded after overload selection.
Deferring these conditions until the implementation is known also handles external and composed receivers, preserves implementation-dependent typing.Self, and keeps gradual or otherwise uncertain overloads available. Same-protocol and inherited receiver branches use their nominal views to avoid recursively checking an interface while it is being constructed. The same path applies to overloaded instance and class methods rather than being specific to __call__.
The uncommon condition data is interned so unrelated cached protocol members and signatures retain their existing inline sizes.