Fix ceil/floor/round bugs in Rat, add IsReal laws.

This commit adds some extra laws that do basic checking
to make sure that IsReal[A] is implemented correctly.
These laws caught a careless error that would occur
when dealing with negative Rat values.

Note: if we required a Rig[A] we could write more precise
laws. Here's one example:

  if x is whole, then ceil(x) - floor(x) is 0
  otherwise, ceil(x) - floor(x) is 1

We don't have a good way to test this without using
subtraction and the values 0 and 1.