Homogeneous Linear Diophantine Equations

This PR adds the ability to solve a system of homogeneous linear Diophantine equations.
 
I converted python code found [here](https://github.com/sympy/sympy/pull/7241) to C++. These are the to-dos listed there.

* Implement solutions for inhomogeneous case
* Add more tests
* Find solutions in negative integers if possible

These can be implemented in separate PRs. I skimmed through the paper but I don't remember why I put the  last one. Let's think about that after this PR is merged.

Link to the research paper: [An Efficient Incremental Algorithm for Solving Systems of Linear Diophantine Equations](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.47.2737).

#### TODO
- [x] Merge #332 and refactor this PR
This seems hackish. If, for example, you called some operation on the "t" matrix below these lines, the `t_` might get deallocated, and then the reference in `t_` will be invalid. If you want to store an integer like this, you have to use `RCP<Integer>`. Or, the other option is to do something like
```
mpz_class t_ = rcp_static_cast<const Integer>(t.get(0, j))->as_mpz()
```
Finally, how do you know that the entries in `t` are Integers? What if it is something else? Then it's going to segfault. You should only use `rcp_static_cast<const Integer>` if you know for sure that you have an instance of Integer.