Zeroing in on self-hosting

Today was pretty productive; made several additions to the parser, added support for a few lingering language features that have been neglected up until now, and fixed a couple minor bugs. The compiler is getting richer, the test suite is expanding at a decent pace, and we're very close to being able to self-host this bad boy.

I have a list of stuff that needs to get done, and it's short:

Finish implementing unary operators

Fix the few remaining template bugs

Write the .EXE generation logic

Run a final pass over the code for any remaining TODOs that are blocking self-hosting

There's also a handful of "bonus features" that would be cool to get in place but aren't strictly necessary for self-hosting. I'm planning on leaving those for later, since my goal was to self-host by the end of this year, and time is running short for hitting that milestone.

Depending on how motivated I am for the next few days, unary operator support shouldn't be too hard to finish off. Once that's out of the way, there's a handful of issues and missing support bits for templates, which will take a bit more effort but ultimately not a ton of time. Rebuilding the .EXE generation logic in Epoch will be kind of finicky, but it's really just a matter of screwing around with byte buffers and such, so it won't be too awful, especially since I have a working reference implementation in C++ to compare with.

And of course there remains the very real potential for the compiler to fail self-hosting on the first attempt, which wouldn't surprise me at all, and will add to the time required.