Implement wrappers for Matrices

* Now the Cython code compiles without any errors
* I introduced a new class `VecBasic` which contains a `vec_basic` object
  from dict.h
* I also introduced a new constructor for DenseMatrix class so I could avoid
  using vector[RCP[const csympy.Basic]] in Cython
CMake: rework FindGMP, use GMP_DIR

Now the user can specify the base directory for GMP as follows:

cmake -DGMP_DIR=/some/path .
Implement csr_binop_csr for canonical CSR matrices
Change the prototype of `csr_binop_csr_canonical` and add more tests

* Chnage the API of `csr_binop_csr_canonical` to accept an output matrix
  to which the results are written
* Add more tests for set method. Earlier the case when matrix is zero
  had not been considered.
Fix a bug in `set()` in CSRMatrix and add tests for csr_binop_csr_canonical

* `set()` method in CSRMatrix was not considering the case where we set
  a non-zero element to zero
Added additional CMAKE options

Added:
* DWITH_PRIMESIEVE
* DWITH_ARB
Implement `__sympy__()` method and `densematrix()` function
Add tests for `get` method and fix a typo

* Add tests for `get()` method
* Use `_sympy_` instead of `__sympy__`
* Raise an exception if matrix type is not `DenseMatrix`.
Add tests for sympy conversion and `set()` method