Prevent loop variable capture that resulted in misleading messages

Also log the linterName.

Test Plan:
Linted a file and saw log output that made more sense.
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.
:lipstick: Remove injectLinterViewIntoEditor method
Stop using deprecated event subscribe method
:lipstick: Move grammar change handler to LinterView
Remove outdated info about React from readme
:memo: update changelog
Disable assert broken by Chrome CSP
Prepare 0.9.0 release