  /** 
   * Returns two observables which partition the observations of the source by the given function.
   * The first will trigger observations for those values for which the predicate returns true. 
   * The second will trigger observations for those values where the predicate returns false. 
   * The predicate is executed once for each subscribed observer. 
   * Both also propagate all error observations arising from the source and each completes 
   * when the source completes.
   * @param {Function} predicate 
   *    The function to determine which output Observable will trigger a particular observation.
   * @returns {Array}
   *    An array of observables. The first triggers when the predicate returns true, 
   *    and the second triggers when the predicate returns false.
  */
  observableProto.partition = function(predicate, thisArg) {
    var published = this.publish().refCount();
    return [ 
      published.filter(predicate, thisArg), 
      published.filter(function (x, i, o) { return !predicate.call(thisArg, x, i, o); })
    ];
  };
