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.
We use a combination of plain-old-data records and standalone functions for our other data structures. This style seems out of place with the rest of the code in the compiler. Would be nice to just have functions that take a TextSpan as the first argument.