[ty] Optional lower/upper bounds in individual constraints (#25435)
This is a simpler alternative to #22400. Instead of completely reworking
our representation of individual constraints, we just wrap the lower and
upper bounds in `Option`. If either is `None`, that bound is _missing_,
as opposed to having an explicit `Never` lower bound / `object` upper
bound. This is much less invasive of a change!
Closes https://github.com/astral-sh/ty/issues/3558