refactor(*): decouple modules

New utility functions to add/remove listeners.
Replace `X.prototype = { y: ... }` with `X.prototype.y = ...`
No direct calls to ring from CJ and JP.
No direct calls to tournament from ring, CJ and JP.