Oh fuck. I just realized: This is going to keep the blocks around forever, now... which means that everything in scope when the block was created will also be in scope forever. Depending on usage, this could be a big and hard-to-track down memory leak.

I'm not sure what the 'right' thing is... Maybe we only memoize on `options`, like you had, but we still do block calling, regardless of whether we're hitting the memoized value or not? Or maybe we're over-thinking and we don't memoize this because the speed cost is honestly likely to be pretty small? Bleeeeeeeeeeh.