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.
This is weird because `describe_func` inspects the stack, so the two invocations get different results.

My original plan was to fix that first, but that turned out to be harder than expected, so I just left (what I think is) the current behavior.