Lots of changes to parser

Big ones include splitting each AST node class into it's own header
and to use std::unique_ptr everywhere.