Feature/fix perf

/to @ritch 
/to @bajtos 

Here are a few patterns I use:

1. Convert array.forEach(fn) to for(var k = 0; k < keys.length; k++) {...};
See: http://jsperf.com/fast-array-foreach

2. Avoid Object.defineProperty()
See: http://jsperf.com/object-defineproperty-vs-definegetter-vs-normal/21

3. Avoid array.indexOf() 
If it's speed that you want, you should rewrite it as:

```javascript
for (var i = 0, n = keys.length; i < n; i++) {
  var key = keys[i];
  cb(key, props[key]);
}
```

V8's optimizing compiler can probably infer that keys.length and keys[i] are stable but the baseline compiler surely won't.