Implement Matrix functions

This PR implements:
* Submatrix
* Transpose
* Diagonal solve
* Fraction free versions of Gauss elimination and Gauss Jordan elimination

#### TODO
- [x] Implement pivot list in pivoted versions of the elimination algorithms
This analysis looks correct. Try to run the code on the matrix A from Example 1, the result is worked out in Example 2. You should get diag(-10, -10, -10, -10), as they get on the page 14 on the left. We ignore the last column, which is just the right hand side.

If that works, then the algorithm is probably correct, and I guess you don't always get a determinant on the diagonal.