[WIP] Try to implement Rationals

Currently this is about 30% slower on the ((y + x + z + w)^15 + w)*(y + x + z + w)^15 benchmark.

When I simply used `mpq_class` instead of `mpz_class`, it got 70% slower. Currently I have if switches there and use `mpz_class` whenever possible, but still the speed suffers.

TODO:

* [ ] Figure out the exact reason for slowdown
* [ ] Fix the slowdown