Properly manage observers added to NSNotificationCenter

For #735 we learned `addObserverForName:object:queue:usingBlock:` isn't all that handy, and we weren't properly managing the observers it returns. This pull replaces all uses of that method with the more typical `addObserver:selector:name:object:` and adds `dealloc` cleanup where necessary.