code: function(event) {
          if (typeof event === "string") {
              event = { type: event };
          }
          if (typeof event.target !== "undefined") {
              event.target = this;
          }
  
          if (typeof event.type === "undefined") {
              throw new Error("Event object missing 'type' property.");
          }
  
          if (this._listeners[event.type]) {
  
              //create a copy of the array and use that so listeners can't chane
              var listeners = this._listeners[event.type].concat();
              for (var i=0, len=listeners.length; i < len; i++) {
                  listeners[i].call(this, event);
              }
          }
      }
docs: Fires an event based on the passed-in object.
  @param {Object|String} event An object with at least a 'type' attribute
  or a string indicating the event name.
  @return {void}
  @method fire