Fix bug with Rational(0D) constructor.

This would treat 0 (-0) as a value very close to, but not quite 0, and
we'd get back such a Rational (either positive or negative). This now
explicitly checks if the argument is 0 and returns Rational.zero.