Make 'CurryUncurry{,M}' constraints stronger; simplify type sigs.

E.g., now

  CurriedUncurriedM t ~ t

is part of 'CurryUncurryM t', and so decorators now have type

  ... t -> t

instead of

  ... t -> CurriedUncurriedM t
Add strictness to 'simpleMemoize'.

So that 'unsafePerformIO' hacks work in 'unsafeMemoize'.
Add 'unsafeMemoize'.

Like 'unsafeTrace', but a little trickier because we allocate the
state in a closure in 'unsafePerformIO'.  The two unsafe decorators
are very similar and can probably be abstracted into the application
of general "unsafe" decorator transformer (decorator decorator :P).