Set Declarations and Operations

TODO

Note

We will want to support indexed sets, such as:

auto A = coek::RangeSet(1,10)
auto B = coek::Set(A)

This will be necessary to specify nested compact expressions:

auto x = coek::variable( coek::Forall(i).In(A).
                               Forall(j).In(B[i]) );

We cannot just use a STL vector or something similar here, as we need the code B[i] to return a reference to a set object tha will be resolved later.