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() 
Array#forEach() also incurs a minor performance penalty because it skips over undefined indexes, i.e. it does this:

```javascript
Array.property.forEach = function(f) {  // Ignoring receiver argument.
  for (var i = 0, n = this.length | 0; i < n; i += 1) {
    if (i in this) f(this[i], i, this);
  }
};