Implement an actual Compiler pipeline, use it to simplify test matchers

All I wanted was implementing failNamingWith without code duplication, it kinda escalated from there...
Yeah, I worried about that too. Then I stopped caring about features we aren't even using yet, which made everything a lot easier.