Extended the gen:dict interface; also added some dict and hash operations.

- Added hash-empty?, hash-clear, and hash-clear! for hash tables.
- Added dict-empty?, dict-clear, and dict-clear! for dictionaries.
- Made all dict functions exported by racket/dict into generic methods; turned
  the existing implementations into fallbacks.
Added define-custom-hash-types and make-custom-hash-types.

The definition form and function consume an equality predicate and optional hash
code functions and key predicate, and produce predicates and constructor
functions for hash table-based dictionaries using the given equality and hash
functions.  Immutable, mutable, and weak dictionaries are defined.
Added dict-copy operation.

Similar to hash-copy or string-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.