LALR backend

This is still rough around the edges and needs some cleanup (see comments marked `XXX`), but all tests pass.

And it's only a few nanoseconds slower than LL(k). :)