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.
I can change that.  But it becomes a matter of DRY (don't repeat yourself).  This code pattern is used all over the place, instead of unifying in a single place that expresses the concept and can be used uniformly instead.