Class-as-namespace style
I've noticed several things that I'd consider "functions" that are (to me) artificially wrapped in empty classes. One example is the structured IR extractor, which I've pulled out into a separate function in 684b5a45. I then noticed that this is the case with lots of functionality, and I'm not quite sure why. I'm happy to have 684b5a45 reverted if there's a good reason, but as it is it seems to make reuse of tool functions hard and clutter up call sites, in addition to suggesting the presence of state when there isn't any.