[caches] Simplifications in the management of caches
Instead of keeping `util.cache_clearing_funs` and `util._weakref_lru_caches` we just
`util._caches` that has both a reference to the cache, and also the name of the
function for which it is used. The name has been useful for investigating memory
leaks due to caches.
I am removing a few redundant cache clearing invocations, they are were
already subsumed by `util.clear_all_caches`.