- Locally-declared to avoid polluting the namespace.

- `static` storage so that it can safely reference itself without introducing reference cycle leaks.
  
  I had attempted recursion via a weak block variable, and that attempt further closed over the cache (which was convenient), but the definition of reduction introduces a delay which extends the lifetime of the use of the block past the existence of the block.
  
  That [can also be solved by recursing outside of the delay](https://github.com/robrix/Hammer/commit/822dd72e33e1e1ff6881a9aee04c99cff573afe2) (and thus closing the delay over it), which retains the desirable property of the delay (lazily evaluating the reduction’s block) while also avoiding nulled block calls; however, that implementation appears to incur extra copying:

		movl	$48, -60(%rbp)
		leaq	___Block_byref_object_copy_(%rip), %rsi
		movq	%rsi, -56(%rbp)
		leaq	___Block_byref_object_dispose_(%rip), %rsi