Unbind single callback with stopListening()

The `callback` parameter to `stopListening()` was never referenced. This resulted in `stopListening()` always unbinding all callbacks that matched the event.

This PR makes it consistent with `unbind()`, where specifying the callback will remove only that callback.

I'm open to suggestions on how to make the test clearer.

On a side note, this function is kind of gross to work with--might be a good candidate for some refactoring. I thought of a few ways to simplify it and some edge cases it doesn't currently handle. Might give it a look later.