review edits

canonical was defined for BooleanAtom so if a relation evaluates one can
still use the property:

e.g. (3 <= oo).canonical -> true instead of an error

Since no other algebraic operations are defined for Relationals, __neg__
was not defined, either. Removing a leading sign from the lhs is now
part of canonicalization. To negative both sides of a Relational, the
following can be done:

r.reversed.func(*[-i for i in r.args])
limit floor/ceiling relationals to real args