code: function filter(target, fn) {
      target = target || [];
  
      var a = [],
          l,
          i;
  
      for (i = 0, l = target.length; i < l; i++)
        if (target[i].fn !== fn)
          a.push(target[i]);
  
      return a;
    }
docs: This method unbinds one or more functions from events of the emitter. So,
  these functions will no more be executed when the related events are
  emitted. If the functions were not bound to the events, nothing will
  happen, and no error will be thrown.
  
  Variant 1:
  **********
  > myEmitter.off('myEvent', myHandler);
  
  @param  {string}   event   The event to unbind the handler from.
  @param  {function} handler The function to unbind.
  @return {Emitter}          Returns this.
  
  Variant 2:
  **********
  > myEmitter.off(['myEvent1', 'myEvent2'], myHandler);
  
  @param  {array}    events  The events to unbind the handler from.
  @param  {function} handler The function to unbind.
  @return {Emitter}          Returns this.
  
  Variant 3:
  **********
  > myEmitter.off({
  >   myEvent1: myHandler1,
  >   myEvent2: myHandler2
  > });
  
  @param  {object} bindings An object containing pairs event / function.
  @return {Emitter}         Returns this.
  
  Variant 4:
  **********
  > myEmitter.off(myHandler);
  
  @param  {function} handler The function to unbind from every events.
  @return {Emitter}          Returns this.
  
  Variant 5:
  **********
  > myEmitter.off(event);
  
  @param  {string} event     The event we should unbind.
  @return {Emitter}          Returns this.