ENH support callable to modify caching key

Sometimes not all components of all arguments should be cached. For methods on objects with some significant and some insignificant state, `ignore` is insufficient.

See https://github.com/scikit-learn/scikit-learn/pull/2086#issuecomment-19884529

given
```python
from joblib import Memory
from sklearn.svm import SVC
from sklearn.datasets import load_iris
iris = load_iris()
svc = SVC()
memory = Memory('/tmp/foobar')
```

```python
```