FIX: make test_memorized_repr pass under windows

Using eval(repr(memoized_func)) is not safe under windows as the
backslash path separator is not interpreted correctly.
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