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
- [ ] Merge #332 and refactor this PR
I need to think if this is safe or not, i.e. if the compiler can check the bounds in debug mode. I think gcc can do it, but we need to enable it (see also #307). If it was a 1D array, I would say just use `std::vector`. For 2D arrays, we can probably use vector of vectors or maybe there is something better. We can also maybe use something safe in Debug mode, and just raw C arrays (as you do now) in Release mode for performance --- I am pretty sure the only change using ifdefs would be the definition, the code below wouldn't change.

The goal is to make sure that it can't segfault in Debug mode, if there is off by one bug in the code or if the user provides input that provides this off by one bug. We need to be able to catch it in Debug mode.