A bit more cleanup

 * gmp_mod and gmp_div_r no longer return a long result if the
   modulus is long. Now a GMP instance is always return (which is
   of course castable to a long).
 * Due to the above change gmp_div_r no longer returns incorrect
   results in some rounding modes with a long exponent.
 * If an invalid rounding mode is passed a warning is thrown rather
   than silently returning NULL.
Remove various indirections

Rather than allocating mpz_t structures and storing them in mpz_t*
pointers directly work with the mpz_t structures (without additional
allocation). mpz_t is already a (pseudo) indirection.

Also now uses zval*s everywhere rather than zval**s.
Remove compare_objects_t back to compare_t