Added gen:set, mutable and weak sets, and custom set types.

Sets are now implemented as a generic interface, and lists count as sets.  Most
of the set functions have been added as methods, including mutable versions of
imperative update methods.
Added tests for mutable, weak, and custom sets.