Finished most of the framework for keywords.

Several of the keywords work now as well, however, of the ones that have been
started, closure and foreach do not work yet.
Finished existing keywords.

A few keywords still need a bit of modification, but at this stage, keywords should be feature complete with the existing compiler features.
Added missing balancer
Fixed failing unit tests (or removed/fixed invalid ones)
Added proc _a(){ } definition syntax
Merge remote-tracking branch 'origin' into keywords
Merged in keywords branch.

This feature reworks several existing features, and adds a few more. All functions that use brace syntax are now considered "keywords" and are handled via the new keyword mechanism. There are two notable additions. dowhile() now supports do { } while(...); syntax, and procedures may be defined as such: proc _myProc(@a, @b){ }. Many error messages regarding erroneously used braces should be improved as well, including when using braces with an unsupported keyword. In the future, it should be easy to add braces as a shorthand associative array creation mechanism too. This feature greatly simplifies the compiler, as it no longer has special cases for things like if/else statements. Extensions may also add new keywords, as the compiler discovers keywords via an annotation mechanism. Keywords will eventually be a new category in the syntax highlighter, and will highlight the keywords different than functions, even if the keyword itself is also a function. Documentation on how to use these new features has not yet been added, but will be.

There is one intentional breakage. Switch statements that use braces AND do NOT use case statements will no longer work. Switch statements using the pure functional notation will continue to work, as will switch statements that use case statements with braces.
Change private method to protected, so the compiler doesn't optimize it

It was exhibiting odd behavior, and this change fixes that.