text:     /**
       *  Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function.
       *  
       * @example
       *  var res = observable.groupBy(function (x) { return x.id; });
       *  2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; });
       *  3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); });
       * @param {Function} keySelector A function to extract the key for each element.
       * @param {Function} [elementSelector]  A function to map each source element to an element in an observable group.
       * @param {Function} [keySerializer]  Used to serialize the given object into a string for object comparison.
       * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value.    
       */
      observableProto.groupBy = function (keySelector, elementSelector, keySerializer) {
          return this.groupByUntil(keySelector, elementSelector, function () {
              return observableNever();
          }, keySerializer);
      };
  