Parse Refactor

This was a huge set of changes to refactor how parsing is done, and how parse state is maintained. The purpose of this change is to enable error reporting, independent function-body parsing, and a modernization of the type system. There was also an effort to support (almost) all of the current set of syntax features.