Allow opting out of enumerable-safety

Introduce a `__defineNonEnumerable` hook. This allows parts of Ember to opt-out of enumerable safety (marking internal properties as non-enumerable).

Unfortunately at this time there is no way to create fast, non-enumerable properties. Historically Ember has this to allow people to `merge`, `extend` and `JSON.stringify` Ember objects, which requires being careful about enumerability.

Unfortunately, classes like `Ember.View` should do not be used in these contexts, but still suffer from the pretty hefty overhead.

This PR Reduces the cost of view allocation by 300% -> 400%.

Micro bench (creating 10,000 views):

```
before: 120ms
after:   35ms
```

the 25ms of the remaining is mostly funkyness we do in Ember.View and CoreView ourselves. We can be careful and clean lots of that up still.

- [x] make it work
- [ ] consider more objects
- [ ] only enabled in test mode?
- [ ] more refactorings
- [ ] add support for symbols if they are available
I believe that this was already merged in https://github.com/emberjs/ember.js/pull/9701/files.