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
Nice paper. So the `fraction_free_gauss_jordan_elimination` function is implementing the `Algorithm 2` from Nakos, G. C., Turner, P. R., & Williams, R. M. (1997). Fraction-free algorithms for linear and polynomial equations. ACM SIGSAM Bulletin, 31(3), 11–19. doi:10.1145/271130.271133. You should mention this in the comments.

Let's see if we can figure where the problem is.