code: function dynamicWatcher (expr, notifierKeys) {
      if (expr.$$watchDelegate.wrapped) {
        return expr.$$watchDelegate;
      }
  
      function setupListeners (scope, cb) {
        notifierKeys.forEach(function (nk) {
          scope.$on('$$rebind::' + nk, cb);
        });
      }
  
      function wrapDelegate (watchDelegate, scope, listener, objectEquality, parsedExpression) {
        var delegateCall = watchDelegate.bind(this, scope, listener, objectEquality, parsedExpression);
        setupListeners(scope, delegateCall);
        return delegateCall();
      }
  
      var delegate     = wrapDelegate.bind(this, expr.$$watchDelegate);
      delegate.wrapped = true;
  
      return delegate;
    }
docs: @ngdoc method
  @name dynamicWatcher
  @kind function
  @description
  
  Utility method that extends a regular oneTimeWatchDelegate function with
  scope listeners for each of the given notifier keys. When an event in the format of
  '$$rebind::[notifierKey]' is caught in the associated $scope, a oneTimeWatchDelegate
  will be called with the original options and reevaluate the given expression.
  
  If the given expr.$$watchDelegate has already been flagged as 'wrapped', we're hitting this
  function again due to some caching behaviour of Angular expressions. In which case,
  we should not register additional $on listeners, nor should we re-wrap the given expression.
  Exit early o/
  
  @param {String|Function} expr - The expression to evaluate. Can be either a string or a function.
  @param {Array} notifierKeys - An array of keys to setup $on listeners for.
  
  @returns {Function} wrap - A decorated oneTimeWatchDelegate function.