fix bug with $on/$off methods

Calling one of the $off methods and then almost immediately calling the $on method could cause a race condition leading to an undefined handler being passed as a callback. The $off methods don't need to be wrapped in $timeout(..)