Added dict-copy operation; renamed dict-supports(?|/c) to dict-implements(?|/c).

Similar to hash-copy or string-copy, dict-copy creates a new, mutable copy of
the given dictionary.  Added as a method of gen:dict.
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.
Documented new options for define-generics.

Added documentation for #:fast-defaults, #:fallbacks, and #:defined-predicate.
Also documented #:defined-table as deprecated in favor of #:defined-predicate,
and touched up other parts of the documentation, mostly by reordering.
Documented changes to racket/dict.

Reorganized the documentation with a separate subsection for gen:dict methods,
split into primitive and derived depending on whether they have fallback
implementations.  Added the new methods dict-empty?, dict-copy, dict-clear, and
dict-clear!.  Documented dict-supports?, dict-support/c, make-custom-hash-types,
and define-custom-hash-types.
Documented changes to racket/set.

Added documentation gen:set and reorganized documentation to set aside functions
that are methods of gen:set.  Documented new mutable, weak, and custom set
types.  Documented new methods for mutating sets.