Refactor processing of inequalities with oo

fixes #7775
fixes #7798
fixes #7841

this patch replaces #7800 and #7799
> this can be only in a very specific circumstances (if we subclass Infinity/NegativeInfinity).

And you are sure we will never do that in the future?

Pro: I think the semantics are better if you use `.__le__`: we do not merely want to ask if `Infinity <= self` (we have already been asked that, albeit in another form).  Rather, we actually explicitly want to call a method of `Infinity`.  So why not specify that to a future programmer?

Con: slightly less readable code.

sorry for bike-shedding!