Initial implementation of the sparse matrix.

@bsoetaer 
Tests pass when the contracts are disabled.
Because it's a hash of vector builders. This is equivalent to having a hash with a default proc, except we have different defaults for getting and setting.  When we get, we just want to retrieve a zero when there's no corresponding hash. When we get a whole row, we want to get an empty vector builder if there's nothing in that row.  It's only when we want to set an element that we want to create a whole new vector builder and add it to the hash.