[ty] Add universal constraint quantification (#26694)
## Summary
`ConstraintSet` already supports existentially abstracting a set of
inferable type variables. This adds the universal counterpart,
`ConstraintSet::for_all`, using the Boolean dual `¬∃¬` so it reuses the
cached, single-pass existential abstraction added in #26622.
The operation is intentionally low-level: declared type-variable bounds
and constraints must be encoded as implications in the input, and
callers must first project atomic constraints that relate removed
variables to variables retained in the result.
The stacked receiver-constraint and signature-relation follow-ups
culminate in #26695, which uses this operation when comparing generic
signatures.