Implement Matrix functions

This PR implements:
* Submatrix
* Transpose
* Fraction free gaussian elimination
* Diagonal solve
* Fraction free versions of Gauss elimination and Gauss Jordan elimination

#### TODO
- [x] Implement pivot list in pivoted versions of the elimination algorithms
You should write the if statement explicitly, i.e.:
```
if (i > 0)
```
So that it's clear what it means.