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.
Update changelog
BUG: py3 compat
DOC: formulation
TST: more thorough test of module reloading
ENH: except TypeError explicitly for unhashable callables
TST: more explicit inline test comments
ENH: be Python 4 proof :)
FIX: inline code change invalidates memory
typo
Merge pull request #137 from ogrisel/memory_func_cache

ENH: memory robust to modification of source files