Argcache cleanup

Clean up various things in the cache framework.

* Reorganize code; most notably, move `cache_function` from argcache.py to function.py.
* Clean up arg-processing code to use Python 2.7's `inspect.getcallargs` instead of a custom `normalize_args` function.
 * To-do: support *args and **kwargs?
* Remove the concept of ArgCache "uid"; stop checking for duplicate ArgCaches (which used to be a concern with older versions of Django importing everything twice, but not anymore)
  * To-do: determine whether the cache registry can be gotten rid of or simplified.
* Miscellaneous other code removal/deduplication.
Is this necessary at all?  It looks like `extra_name` ends up getting concatenated to `describe_func(func)` anyway.

(Likewise below in `web/util/template.py`, and the code to support this in `cache/function.py`.)