Fully static argument resolution

:arg-resolvers is now a map keyed by keywords and symbols, where values
at keyword keys are expected to be "argument resolver
factories" and values at symbols keys are expected to be argument
resolvers.

Argument resolvers bound to symbol keys will be used to resolve formal
arguments by name.

Argument resolver factories bound to keywords will be used to resolve
formal arguments tagged with those keywords; the actual resolvers are
obtained by passing the symbolic name of the formal argument to the
argument resolver factory.

Example:

  (ns example.foo
    {:arg-resolvers {:foo (fn [sym] (constantly (str sym)))}}
    ...)

  (defn index [^:foo bar]
    ...)

Here the symbol 'bar will be passed to

  (fn [sym] (constantly (str sym)));

the resulting function -- (constantly "bar") -- will be applied to
incoming requests and the returned value of "bar" will be passed to
index.