add new theory (sets)

Specification (smt2) -- as per this commit, subject to change

* Parameterized sort Set, e.g. (Set Int)

* Empty set constant (typed), use with "as" to specify the type, e.g.
    (as emptyset (Set Int))

* Create a singleton set
    (setenum X (Set X)) : creates singleton set

* Functions/operators
    (union (Set X) (Set X) (Set X))
    (intersection (Set X) (Set X) (Set X))
    (setminus (Set X) (Set X) (Set X))

* Predicates
    (in X (Set X) Bool) : membership
    (subseteq (Set X) (Set X) Bool) : set containment
option to print stats after every satisfiability or validity query