Corrected compare method to obey Order contract to return only -1/0/1

I've run grep for `def compare` and found a few places where the method could return arbitrary negative or positive integers instead of -1/0/+1.

Should we also add a `signum` to `BigInt` and `BigDecimal` instances ?