Allow construction of a Subset by indexing a Set

Instead of writing

    subset = op2.Subset(set, indices)

one may now write:

    subset = set[indices]
Allow constructing a Subset from an existing Subset

    subset1 = op2.Subset(set, idx1)
    subset2 = op2.Subset(subset1, idx2)

is now equivalent to

   subset2 = op2.Subset(set, idx1[idx2])
Allow construction of a Subset by indexing a Subset
Set _foo_size rather than _sub_foo_size properties on Subset

This allows us to use the superclass properties for core_part and so forth.
Add error-checking in Subset construction

Negative indices, or indices larger than the superset size are
invalid, as are repeated indices.  Furthermore, ensure indices are
sorted to allow proper subset indexing.
Add more tests of Subset functionality