Add syntactic sugar for DataSet declaration using exponentiation

Now:

    s = Set(...)
    d = DataSet(s, dim)
    dat = Dat(d, ...)

and

    s = Set(...)
    dat = Dat(s**dim, ...)

are equivalent, closes #190
Allow Sets as arguments to Dat and Sparsity constructors

A Set passed in where a DataSet is expected is converted into a
DataSet with dim == 1.
Add Set exponentiation API tests
Add test for magic Sparsity Set not DataSet constructor
Update demos and unit tests for sets as arguments of Dat and Sparsity declaration
Merge pull request #192 from 'OP2/issue-190'

Introduce exponentiation for constructing a DataSet from a Set along
with defaulting Sets to DataSets of dimension 1 if a Set is passed in
where a DataSet is required.