Refactor the matrix classes

* `MatrixBase` no longer inherits from `Basic`
* Some of the virtual functions related to `Basic` were removed
* `add_dense_dense`, `add_dense_scalar`, `mul_dense_dense` and `mul_dense_scalar`
  now takes a third argument which is used to store the result of the respective
  operation
Refactor tests and `gaussian_elimination`
Continue Refactoring

* Split the matrix functions into two files, `dense_matrix.cpp` and `sparse_matrix.cpp`
* Refactor tests completely to align with new API
Merge pull request #186 from thilinarmtb/refactor_matrix_classes

Refactor matrix classes and functions