Kill ParametrizedSingleton in esp.cache.argcache

This was a workaround for an issue with Django double imports that no
longer exists.

TODO: do something about the cache registry, which assumes cache UIDs
are unique (which was enforced by ParametrizedSingleton)
Kill cache_by_uid
Kill argcache uid entirely
Remove unneeded import
Fix signature of ArgCache.delete_key_set

There is actually no reason to use **kwargs here.
Move cache delete signal to cache.signals.cache_deleted
Reorganize code in ArgCache

ArgCacheDecorator: argcache.py -> function.py
describe_func/describe_class: function.py -> marinade.py
Clean up arg-processing code in ArgCacheDecorator
Remove dangling reference to deleted function in marinade.py
Fixes bug with adding a list of users using add_list_member

Improves upon fix in 003d738b, based on discussion in Github pull
request #1297.

Splits add_list_member() into add_list_member() and add_list_members(),
where the former only takes a single user or email, and the latter only
takes lists of users or emails.
Merge remote-tracking branch 'origin/main' into argcache-cleanup

Conflicts:
	esp/esp/cache/argcache.py

(conflict with removed imports in 6db42ed)
Add todo comments for describe_func
Add comment explaining a potential args/kwargs problem
Adds dashboard metrics for lineitemoption choices

Extra costs with options will now show selection counts for each
individual option, in addition to the total count for the line item.

Additionally, get_users_from_module() now uses an OrderedDict, so that
filters from the same program module will appear together, and program
modules that care about the order can return their results in an
OrderedDict.  We make use of this to show the total line item count
before the counts of the options, and to show those things together
without other line item data coming between them.
Allows user lists dict to be any dict type

This fixes a failing test, due to the fact that the code was testing
that only the dict type was being used, instead of any instance of dict.
So the OrderedDict introduced in the previous commit was not considered
valid.
Removes more uses of type()
Clean up describe_func stack inspection

Separate out the stack-inspecting sketchiness into another function,
get_containing_class. Use this inside @cache_function to get the
enclosing class, but allow it to be overridden when called from other
decorators such as @cache_inclusion_tag and @cached_module_view.
Move Varnish stuff out into its own app
Fix scripts to behave correctly when run in existing virtualenv

If VIRTUAL_ENV environment variable is set, don't even try to activate
our own.

This may cause unexpected behavior if an unrelated virtualenv is
active, but developers that use virtualenv in other projects should be
careful about that anyway.
Change old-style user list selection from main_call to aux_call

New style and old style were both main_call, and that was confusing
the manage page and causing it to only link to the old style.