code: function buildEnumerableMethods(names, mapping) {
      extendSimilar(object, false, false, names, function(methods, name) {
        methods[name] = function(obj, arg1, arg2) {
          var result, coerced = keysWithCoercion(obj);
          result = array.prototype[name].call(coerced, function(key) {
            if(mapping) {
              return transformArgument(obj[key], arg1, obj, [key, obj[key], obj]);
            } else {
              return multiMatch(obj[key], arg1, obj, [key, obj[key], obj]);
            }
          }, arg2);
          if(isArray(result)) {
            // The method has returned an array of keys so use this array
            // to build up the resulting object in the form we want it in.
            result = result.reduce(function(o, key, i) {
              o[key] = obj[key];
              return o;
            }, {});
          }
          return result;
        };
      });
      buildObjectInstanceMethods(names, Hash);
    }
docs: *
  @method [enumerable](<obj>)
  @returns Boolean
  @short Enumerable methods in the Array package are also available to the Object class. They will perform their normal operations for every property in <obj>.
  @extra In cases where a callback is used, instead of %element, index%, the callback will instead be passed %key, value%. Enumerable methods are also available to extended objects as instance methods.
  
  @set
  each
  map
  any
  all
  none
  count
  find
  findAll
  reduce
  isEmpty
  sum
  average
  min
  max
  least
  most
  
  @example
  
  Object.any({foo:'bar'}, 'bar')            -> true
  Object.extended({foo:'bar'}).any('bar')   -> true
  Object.isEmpty({})                        -> true
  +   Object.map({ fred: { age: 52 } }, 'age'); -> { fred: 52 }
  
  *