Ported a bunch of changes from backbone.

I also fixed a few bugs. Running the backbone tests against results in:
```
Took 2467ms to run 482 tests. 481 passed, 1 failed.
```
Where the only failed test is: `Backbone.Collection: add does not alter arguments`
add a block for the for loop