Clean up LinterView instance lifecycle.

Fixes #279. The cause of this bug was that we are listening to the TextBuffer
even after a TextEditor is destroyed. So the fix is to make sure that the
TextBuffer subscription is released when the TextEditor is destroyed.

Note that we no longer subscribe to TextBuffer's did-destroy because we rely
on it calling TextEditor did-destroy. It'd be nice to not have to interface
with TextBuffer at all, but it seems we need that for when the file is reloaded
and lint on change is disabled.

Beyond #279, there was a memory leak. LinterInitializer never released its
references to LinterViews.

Test Plan:

Followed repro steps in #279 and don't get an error.