Refactor memoized helpers

This is a cleanup of #871 that @JonRowe and I worked on.

It fixes #908 and #817.

We're not 100% thrilled with it, but we could not think of a better way to fix the relevant issues while still allowing `super` within `let`.

Thoughts?