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
And here too, add assert statements that `product.get(j, 0)` as well as `A.get(j, i)` are Integers.