Dataset

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