Implement transpose and submatrix

* Submatrix returns a the submatrix of a given matrix deliniated by the given
  start and ending row, column positions. These inputs assume that row and column
  numbers start from one, which is different from internal implementation.
Implement fraction free gaussian elimination
Implement diagonal solve
Merge diagonal solve, Rename `gaussian_elimination` to `gauss_jordan_elimination`
Extend fraction free gaussian elimination for any matrix
Refactor `gauss_jordan_elimination` using row operations
Implement `pivoted_gaussian_elimination`

Rename `gauss_jordan_elimination` to `pivoted_gauss_jordan_elimination`
Add tests for `pivoted_gaussian_elimination`
Implement `fraction_free_LU`
Remove whitespaces
Add pivotlist to pivoted versions of gaussian elimination
Remove the LU decomposition implementation
Add references for some of the algorithms
Implement solutions for the system `Ax = b`

* implement back substitution
* implement solutions for `Ax = b` by gaussian elimination
* implement solutions for `Ax = b` by gauss jordan elimination
* Add tests
* Correct the bug with fraction free gauss jordan elimination: Now the diagoal entries
  are equal to determinant of the matrix
Refactor code
Merge branch 'master' into implement_submatrix_transpose_diagonal_solve
Add more tests
Merge pull request #191 from thilinarmtb/implement_submatrix_transpose_diagonal_solve

Implement Matrix functions