ENH: memory robust to modification of source files

This instores an in-memory hash that is used to check if functions are
modified rather than looking at the source code.

The main benefit is that if the source code has been modified after the
function has been loaded, it is out of sync with the function in the
interpretor, and thus can lead to spurious cash flushes.

Addresses the issue reported on http://librelist.com/browser//joblib/2014/4/15/re-computation-with-line-number-changes-bug-or-a-feature/ and comes with a test that reproduces the issue (and fails on master).