code: function (o) {
          var r = [];
          for (var i in o) {
            if (o.hasOwnProperty(i)) {
              r.push(i);
            }
          }
          return r;
        }
docs: This technically means that 'each' and 'find' on IE8 iterate through the object twice. This code doesn't run on IE8 much, so it's an acceptable tradeoff. If it becomes a problem we can always duplicate the feature detection inside each and find as well.