Replace calls to BufferChanged callbacks with BufferObserver pattern

As mentioned in Limetext issue #427, the BufferChanged callbacks pattern should be refactored to encourage cleaner code and a unified interface for monitoring changes to buffers. To that end, this pull request implements this new pattern and does away with the old "AddCallback" method.

For 313:
As mentioned in our email with the professors, unfortunately by the time we completed our code for this for the final "open source excursion" project, someone else had already beaten us to it on the main repo. We are still opening this PR on our own fork to demonstrate our changes. For more changes that we hope to get incorporated into the mainline project, see our test suite pull requests.