Dataset

Adds the `op2.DataSet` type based on the `op2.Set` type.

`op2.Dat` now works on `op2.DataSet` instead of `op2.Set`.

Maps are still declared between `op2.Sets`.

`op2.Sparsity` now takes a tuple of `op2.DataSet`s as first argument. It represents the row and column space between which the operator is mapping.