If this PR is added, number comparisons will be consistent with expr behavior in terms of equality: `x**2 != x**2.0` and (new change) `Integer(2) != Float(2)`. In addition there will no longer be a `Float(0)` -- it will collapse to `S(0)`.
I really need input on whether this is going to work, especially on the Fortran front (see changed printing tests and codegen test). The codegen is representative of the change:
assert fcode(literal_dp(0), source_format='free') == '0d0' -> '0'
I am too inactive in current Fortran code to know if this is going to create issues. If this is an issue then perhaps we could allow `Float(0) == S(0) == Float(0, 5) == Float(0, 100)` in contradiction to the behavior for non-zero numbers, e.g. `Float(1) != S(1) != Float(1,5) != Float(1, 100)`.
/c