Caching framework.

Defines a standardised Cache interface for storing data against specific keys. Key generation is also standardised using a KeyMaker interface.

Combining a Cache and KeyMaker allows for memoisation of function calls with respect to the arguments used by using a Memoiser.

As a convenience a simple memoise() decorator is included for quick memoisation of function using a global cache and standard key maker.