Initial implementation of the sparse matrix.

@bsoetaer 
Tests pass when the contracts are disabled.
It's more idiomatic and a more extensible design.  If Matrix had implemented initialize copy instead of clone, we would be able to just use initialize copy and get the right behavior for both dup and clone.