Implement DOM Level 3 behavior instead

Instead of having removeEventListener affect the current dispatchEvent, but not
addEventListener, have neither do it. This is DOM Level 3's behavior rather
than DOM Level 2's behavior.

As of writing, IE and older Opera matches the Level 3 behavior and other
browsers match the Level 2 behavior.  Mimic the IE behavior because it's
simpler and this is not a critical edge case. See
https://github.com/sockjs/sockjs-client/pull/127 for discussion.

Also revise the unit test to actually test the case when the listener list goes
empty which was the original goal of this entire exercise.