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() 
This is a breaking change. Before this patch, `__data` and friends were not enumerable. Now they are enumerable, thus they can potentially appear in the output of `for (var key in model)`.

I am not sure where exactly is the performance problem here, perhaps using a single non-enumerable property to hold all these properties would be enough to speed this up? (`this.__meta = { cachedRelations: {}, /*...*/ }`).