Added .on() method to subscribe to events.

Reworked the handler registering logic.
User can now use `sock.on(event_type, handler)` to register handlers (and not pass them into the constructor. I mean, whyyyyyyy would you do that :) )