Initial implementation of the sparse matrix.

@bsoetaer 
Tests pass when the contracts are disabled.
I don't think we should be using Contracts as a way to type things inside the actual classes. This makes us unable to remove the contracts from our classes and with the current usage problems of our contracts I don't think being coupled to our contracts like this is a good idea.