Unify simple set types

With the addition of a set value identity test function, same, we can
now perform fast path equality tests as was previously done with pointer
equality.

One minor change that comes out of this is that clear can now no longer
be a method since there is no way to get a newly created set back to the
caller except via the returned value. Using a method has the potential
to confuse callers into thinking that s.clear() will always result in a
cleared set on return; it won't unless s was already zero-length and
made. A function call is more indicative that the return should be kept.