[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.
I was mainly focussed with dense matrices at the time, and since their elements are stored contiguously, we could set and access elements by the index `i`. If we used `get(i, j)` we need to to find `i*col + j` to do the same. I too think that in general, using `get(i, j)`/ `set(i, j)` will be better.