Rework internal flatten function

Don't pray to the gods `.apply` can handle the size of the nested arrays

http://jsperf.com/new-flatten

Fixes #1875

~~For lodash speeds we'll need to change `push.apply` to something similar to [this clever logic](https://github.com/lodash/lodash/blob/master/lodash.js/#L1616-1619). Let me know if that's more desirable, I have it [already prepared](https://github.com/megawac/underscore/blob/flatten2/underscore.js#L465-483) and its in the jsperf~~
Let's keep our comments as full sentences, please...