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
Benchmark matrix addition
Add the matrix_add2.cpp to CMakeList.txt
git add matrix_add2.cpp
Refactor matrix_mul_1.cpp to use new API
Add linbox and LELA benchmarks
Add source path to `CMakeLists.txt` in csympy/lib
Copy python wrapper source into binary directroy
Add a test to verify the fix works
Set `WITH_CSYMPY_RCP` to `yes`
Add new benchmarks
Add new matrix multiplication benchmarks
Remove whitespaces
Function Declarations for class `ATan2`

`ATan2` is derived from `Function` rather than from `TrigFunction`
as it has 2 arguments and `TrigFunction` was generalized for one
arg.
Added some methods for `ATan2`

Methods left to be added:
atan2
diff
Added basic version of `atan2` which handles only numbers

We have to figure out a uniform way to check if the given symbolic
expression is positive or negative.
for eg: sub(1, sqrt(2)) should be determined as negative.
Once this is in place, `atan2` can be completed.
Merge pull request #188 from thilinarmtb/cmake_build_failure_#187

Fix for issue #187: Build failure out of source directory
Merge pull request #186 from thilinarmtb/refactor_matrix_classes

Refactor matrix classes and functions