[WIP] Implement sparse matrices

Code from scipy.sparse is used here with slight modifications. Currently,
sparse matrices are represented using CSR form inside `CSRMatirx` class. Tests
were added to check `from_coo` method.

Important
---------

* I removed the templating of the functions in scipy. They were templated by I
and T where I was used as the type of indexing variable and T was the type of
data. In our case T is always `RCP<const Basic>` and I is `unsigned`. Perhaps
it will be good to template all of our functions by I.

* I used `std::vector` to keep track of p, j, x arrays in CSR format instead
of C style arrays or `std::array`. I think it is the best option untill this
gets adopted in C++:
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3532.html

We can't use C-Style arrays or `std::array` as we don't know the number of
elements at the compile time.
Following the method used in `Add::is_canonical` and `Mul::is_canonical`, I copied this code into `CSRMatirx::is_canonical`. Now `CSRMatrix::is_canonical` accepts only the parameters that need to be checked to determine whether the Matrix being built is canonical or not. See [here](https://github.com/thilinarmtb/csympy/blob/sparse/src/matrix.h#L154) and [here](https://github.com/thilinarmtb/csympy/blob/sparse/src/sparse_matrix.cpp#L22). We can keep this method as it is or remove it as redundant.

Also a question, Since `Mul::is_canonical` and `Add::is_canonical` are declared as member methods, why do we passing object properties to them?