Revamp to accommodate view recreation world order.

We now store our per-line matcher state in the buffer using the new line tag
mechanism, rather than in a separate array.

This enables us to avoid reparsing the buffer when it is restored to view after
being hidden (which now results in all the UI and mode machinery being thrown
away and recreated). Now when a, for example, GrammarCodeMode comes online, it
does a cascading rethink starting from the first line of the buffer, which
stops after rethinking the first line because it sees that the state has not
changed.

This also required that we redo the way grammars were compiled. Previously we
were recompiling grammars into a matcher tree every time a GrammarCodeMode was
instantiated (and were needlessy not sharing the matcher tree). This hosed the
by-reference equality comparison that was happening for matcher state, and was
generally wasteful of CPU and memory. Now we compile the grammars for a mode
once and share them among all instantiations of that mode (in space and time).

So in addition to the massive memory savings we have from not keeping UI and
mode machinery around for invisible buffers, we also don't profligately build,
and keep around, myriad identical copies of the matcher tree for a given set of
grammars.

If I'm feeling particularly parsimonious in the future, I'll revamp the
TextMate grammar stuffs to share matcher trees for grammars shared by different
modes (Java, e.g. uses the HTML grammar in JavaDocs, etc.).