unique all of the pointers!

Now it's time to start giving a damn about memory leaks. Earlier
commits I just wanted something that worked, and memory leaks didn't
really matter. In all honesty, every object lived the entire length of
the program and I had already set things up so converted to unique_ptr's
was easily done.

This is that "easy" conversion to move us in a direction of not leaking memory.

Also, typing unique_ptr gives me more carpal tunnel than typing an asterisk.
So I didn't feel like dealing with them yet.
What kind of idiot forgets to close open file handles? Oh...
Declaring a virtual destructor for each AST base class.
Re-ordering around header file includes to reduce unnecessary compilation.
Implicit 'ret void' at the end of functions with no terminator.
while loops are now implemented.

break and continue on the other hand, are not.
Basic function passes for optimizing the resulting LLVM IR code.

Right now I'm just using the CFG simplification pass which eliminates dead
blocks, merges basic blocks if possible, and some other optimizations.

I also modified how If generates instructions to be simpler. It was very
complicated (and didn't work when nesting if statements) because it was
trying to avoid creating dead blocks and avoid unnecessary branching.

Because of the function pass, this isn't needed and it simplifies the code
a lot to not worry about the IR code nearly as much.