Copy Logger.hs to Memoize.hs.

I'm going to write a simple memoizer based on the simple logger ...
A on implementing a simple memoizer.

To make this approach work without explicitly naming the memo state,
we need 'unsafePerformIO', or to do the memoization in a monad. Doing
the memoization in a monad requires writing the functions in the
standard open-recursion style, so that they can "fixed" away from
their definition sites.

Arguably some of the same problems arise in the tracing problem, if we
want to maintain multiple distinct trace states (but filtering a
single universal state should suffice here).

Another possibility is to add SYB-style constraints and cast results
taken from a heterogeneous dictionary of dictionaries ...
Add note on using 'cast' to minimize memoization boilerplate.

At the cost of having 'Data' or 'Typeable' constraints are function
arguments and results ...