Implement a lot of stuff

Here is my take on things ;)
Not saying that your stuff is wrong or bad, it isn't, but I think my approach is a bit cleaner and more straight forward.
Regarding add_listener, It's actually a lot like your code, except that
- I omitted some stuff, like explicitly counting callbacks,
- refined some things, like only processing queues once a message is fully processed,
- used some python capabilities, like `defaultdict`
- and added some gimmicks like legacy `listen(on*=)` API support.

Then I switched to `autobahn` (see #30) and implemented `listen_many` (see #31).
The end result is that now you can monitor 100 rooms with 100 connections (ofc) and only 2 threads in total. Or with 1000 threads... As you please xD