[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 am not sure If I get this correctly. But the article states that,

```
By convention, we define, `row_ptr(n+1) = nnz +1` where `nnz` is the number of nonzeros 
in the matrix . The storage savings for this approach is significant. Instead of storing `n^2` 
elements, we need only `2*nnz + n + 1` storage locations.
```
Since both `j` and `x` has length `nnz`, this means that the length of `p` should be `n + 1`, where `n` is the number of rows in the matrix.