[Bugfix Beta] Improve Ember.Map

* [Perf + ES6] no longer clone array before enumeration (dramatically reduce allocations)
* [Perf] Don’t rebind the callback of forEach if not needed
* [Perf + ES6] no longer allow Map#length to be bindable
* [Perf] don’t double guid keys, as they are passed from map to ordered set (add/remove)
* [ES6] deprecate Map#remove in-favor of the es6 Map#delete
* [ES6] deprecate OrderedSet#remove in-favor of the es6 OrderedSet#delete (to be aligned with es6 set)
* [ES6] error if callback is not a function
* [ES6] Map#set should return the map. This enables chaining map.`map.set(‘foo’,1).set(‘bar’,3);` etc
* [ES6] remove length in-favor of size.

- [ ] run tests on all platforms (coffee shop wifi isn't up to par)
- [ ] we have some extra functionality not in es6 such as clear + copy (what do @wycats r?)
- [ ] removed length in-favour of size (breaking change) I can support length if needed, someone tell me (@wycats r?)
- [ ] removed observable length entirely (it can be restored, but it was 1. a mistake 2. slowish) (@wycats r?)
Not sure I fully understand why you would need to set both (not a big deal though). `deprecateProperty` sets up a getter which is essentially just `return get(this, newKey);`. Seems like that ensures that calling `map.length` would always be in sync AND would not require manual bookkeeping...