code: function( topic, fn, scope, priority ){
  
              var listeners
                  ,orig
                  ,idx
                  ;
  
              // ensure topics hash is initialized
              this._topics = this._topics || (this._topics = {});
  
              // check if we're subscribing to multiple topics
              // with an object
              if ( Physics.util.isObject( topic ) ){
  
                  for ( var t in topic ){
  
                      this.on( t, topic[ t ], fn, scope );
                  }
  
                  return this;
              }
  
              listeners = this._topics[ topic ] || (this._topics[ topic ] = []);
              orig = fn;
  
              if ( Physics.util.isObject( scope ) ){
  
                  fn = Physics.util.bind( fn, scope );
                  fn._bindfn_ = orig;
                  fn._one_ = orig._one_;
                  fn._scope_ = scope;
  
              } else if ( priority === undefined ) {
  
                  priority = scope;
              }
  
              fn._priority_ = priority === undefined ? defaultPriority : priority;
  
              idx = Physics.util.sortedIndex( listeners, fn, getPriority );
  
              listeners.splice( idx, 0, fn );
              return this;
          }
docs: Physics.util.pubsub#on( topic, fn( data, event )[, scope, priority] ) -> this
  Physics.util.pubsub#on( topicConfig[, scope, priority] ) -> this
  - topic (String): The topic name
  - topicConfig (Object): A config with key/value pairs of `{ topic: callbackFn, ... }`
  - fn (Function): The callback function (if not using Object as previous argument)
  - data (Mixed): The data sent from the call to `.emit()`
  - event (Object): Event data, holding `.topic`, the topic, and `.handler`, the `fn` callback.
  - scope (Object): The scope to bind callback to
  - priority (Number): The priority of the callback (higher is earlier)
  
  Subscribe callback(s) to a topic(s).