[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.
Also, we should use bisection here to find it, and we should assume that the internal arrays are always in canonical form. The canonical form is that duplicates are summed over, and the indices are sorted. We should add the usual `is_canonical` assert check into the constructor that accepts arrays. The other constructor doesn't need to be checked. All operations that modify the matrix should always return it in canonical state (i.e. they need to make sure things stay sorted and summed over).