Initial implementation of the sparse matrix.

@bsoetaer 
Tests pass when the contracts are disabled.
Rows is an array, but all its elements are not guaranteed to be arrays.  The tests include cases where an object implementing to_ary is passed as a parameter.