[ty] Preserve protocol method signatures until receiver binding
Summary
Protocol methods can restrict which receivers they accept, and classmethods can use Self to describe the instance type associated with their receiver. Binding these methods before their receiver is known loses information needed for compatibility checks and member lookup.
Retain complete method signatures and bind each overload to the receivers permitted by the protocol. Resolve Self using the actual class-object receiver during member lookup, and materialize types after binding. Stored bound methods retain their captured receivers.
This accepts implementations with matching receiver restrictions and preserves intersection types when binding Self in protocol classmethods.
Depends on #28822, which separates protocol declarations from instance and class access.
Fixes astral-sh/ty#4544.
Fixes astral-sh/ty#4075.
Validation
- Regression coverage for restricted instance methods, classmethods, callback protocols, overloads, stored bound methods, and generic receivers.
- All 959 semantic tests pass; 34 skipped.
- Workspace Clippy with all targets and features passes.
- Formatting and lint hooks pass.
The conformance comparison still has three additional false positives in protocols_generic.py and protocols_self.py, including with python/typing#2363 (8f9607ec). Passing files decrease from 131/146 to 130/146. These compatibility failures involving type variables in receiver annotations remain unresolved.