Some documentation of the sparsity constructor
Fix sparsity cache key inconsistency

We were turning a single Map as the maps argument into a pair of maps
prior to using it as a cache key. As a consequence, constructing
another sparsity with that same Map would not be a cache hit. To fix
this we first normalize the maps argument to be a tuple of pairs and
always use that as the cache key. Also verify that each entry in the
maps argument is actually of type Map.
Add unit tests for sparsity caching with varying maps argument
Sort map pairs to get deterministic order and hit cache for any order
Add unit tests for sparsity cache hit with different order
Add further unit tests for sparsity cache misses
Merge pull request #171 from OP2/fix-sparsity-caching

Fix sparsity caching