Fix observer removal logic

Hi y'all. 

I found a pretty hairy bug in the block KVO category in regards to removing an observer. The check for membership in the internal observers array was wrong - it was checking that the observer to be removed was the observer in the model object, which is *always* true, so observers that were not intended to be removed were getting removed. This should fix that.

Also added a test to demonstrate. With previous behavior this test would fail.
@ndonald2 please Ctrl-I this whole method into next week, i.e. reindent.