add internal listenTo method, refactor bindEvents & addEvents to use it