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
This algorithm doesn't produce results as described in page 13,  `Fraction-Free Algorithms for Linear and Polynomial Equations, George C Nakos, Peter R Turner and Robert M Williams`(Can be downloaded from here: http://dl.acm.org/citation.cfm?id=271133). According to the paper, diagonal elements should be equal to the determinant of the matrix after the algorithm is over, but in the current implementation it is not. I am not sure whether I am doing something wrong, I went over the code several times but couldn't find anything suspicious.