Previously, our code had used unsafe pointer casts for FFI, so that we
could pass pointers to `#[repr(Rust)]` structs across the FFI boundary.
This is a bad idea: while it works now, it could break at any time.
Instead, fork `gmp-rs` and make `gmp::mpz::Mpz` `#[repr(transparent)]`.
That avoids the problem, and also allows for massive cleanups in the FFI
code.