Initial implementation of the sparse matrix.

@bsoetaer 
Tests pass when the contracts are disabled.
Unfortunately, we haven't implemented any sparse zipping algorithms. An inclusive zip (include pairs where just one is non-zero) would be useful for addition. An exclusive zip would be useful for taking the dot product of two vectors.