Add support for incremental parsing.

Right now the entrypoint just causes a full parse to happen.  But the LS code is
cleaned up to take advantage of it appropriately.

This will not be checked in until all the incremental parsing work is complete.
See above comment.  The existing model for parsing inappropriately pushed outer flags to nested children.  This broke the invariant that nodes are only affected by changes below them, and affected the ability for us to be able to incrementally reuse nodes safely.

Note: while this adds a small amount of memory to compilation, the incremental gain produces vastly less garbage for the LS scenario.  this is quite important as garbage leads to GCs which lead to pauses, which pushes the latency for typing above our high water mark.