Entirely new hash tr{e|i}e interface

The old interface (darts.lib.hashtree) is now deprecated. The
shiny new interface is darts.lib.hashtrie

- there is only a single node type now (no longer empty vs.
  dispatch vs. leaf). The code decides the type of node at
  hand based on the node's content

- the new code no longer needs the wrapper object around the
  root of the tree. This greatly simplyfies a lot of the
  code, since we don't have to keep the control object around
  (there is none)

There are generic functions, which allow access to any derived
hash trie. However, when a hash trie is defined, this also defines
specialized accessor and modifier functions, which are usually
faster (though work only on the particular flavour of hash trie
just defined).

Right now, the specialized accessors simply call some global
helpers to get the work done (passing along the correct versions
of hash/test/make-node/empty-node). We could, however, generate
the accessor code directly in `define-hashtrie`, giving these
accessors another performance advantage (this was not possible
with the old interface).
Documentation

Changed the README.md to reflect the changes made
Changed define-hashtree to not use GENSYMs

... in a few places. There are certain definitions, which at best are
redefined whenever the define-hashtrie form is evaluated. Among these
are

 - the global variable holding the canonical empty node
 - the structure constructor
 - etc.