Move syntactic checks out of the parser

Being in the parser makes the incremental parser work much harder.  It means any nodes with a syntactic error cannot be reused, and it also means we need a way to appropriately persist and track that information in the tree.

Around 150 errors were removed from the parser and made into grammar checks.  There are still about 20 errors in the parser that i'd like to address to see if we can get down to <5.  At that point, adding incremental becomes much simpler without having to maintain the invariants necessary to produce these errors.

One downside of this approach is we go back to the old Fidelity way of reporting syntax errors.  Namely, if there are any parse errors, then all grammar errors are supressed.  The current way (only reporting grammar errors if no parse errors were encountered *under that node*) was nicer, but computationally costly to provide in this new model.

Performance impact of this change appears to be negligible.  On my machine, after all the changes, we only got about a 6ms difference in speed compiling the compiler.  In batch scenarios, the impact here should be utterly negligible.   Conversely, this will eventually allow us to speed up incremental scenarios by a factor of 50-100x on large files.  Given that we only care about milliseconds for latency sensitive operations (like editing), and we don't care about it for batch, this seems like the right tradeoff to make.  (Note: the incremental speedup factor is assumed from the performance we had with the old incremental system).