memoizing caching for clojure, with timeout, prune, and purge options