[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?)
In this case (since it is within the function body already) we only need to throw in a:

```javascript
Ember.deprecate('Calling Ember.OrderedSet.prototype.remove has been deprecated, please use Ember.OrderedSet.prototype.delete');`
```

But in the `length` case, I would suggest (same pattern as used for the `view.state` deprecation):

```javascript
deprecateProperty(OrderedSet.prototype, 'length', 'size');
```