code: function(fn, scope) {
          var me = this,
              newMC  = new me.self(me.initialConfig),
              keys   = me.keys,
              items  = me.items,
              length = items.length,
              i;
  
          newMC.getKey = me.getKey;
  
          for (i = 0; i < length; i++) {
              if (fn.call(scope || me, items[i], keys[i])) {
                  newMC.add(keys[i], items[i]);
              }
          }
  
          return newMC;
      }
docs: Filter by a function. Returns a <i>new</i> collection that has been filtered.
  The passed function will be called with each object in the collection.
  If the function returns true, the value is included otherwise it is filtered.
  @param {Function} fn The function to be called.
  @param {Mixed} fn.item The collection item.
  @param {String} fn.key The key of collection item.
  @param {Object} scope (optional) The scope (<code>this</code> reference) in
  which the function is executed. Defaults to this MixedCollection.
  @return {Ext.util.MixedCollection} The new filtered collection
  @since Ext 1