mp_rational: change the semantics of exponentiation involving integrals and rationals not to return floating-point values.

Instead of returning a non-exact floating-point, we either return the exact result or raise an error.