A bunch of work on `retrieve`. Improve the dispatch function; make the
defmethods make slightly more sense, and expand them to cover more cases.
Give make-key a second arity body, so it can make a key out of a
candidate incoming string.