Refactor to remove decorator snake pit
Nested decorators 3-8 deep, sometimes with nontrivial logic inside makes
it difficult to understand what's really going on inside functions. Some
decorators even modify the function signature so that it is called with
different arguments than the docstrings show.
Get rid of all of that. Unrolling everything made the code much easier
to understand and reason about.