Simple framework for caching function results using hashed arguments. Works for numpy arrays too.