Introduce __defineNonEnumerable hook, this allows parts of ember to opt-out of the enumerable safety. Unfortunately at this time there is not way to create fast non-enumerable properties. Historically ember has this to allow people to merge, extend and JSON.stringify. Unfortunately some things like Ember.Views should do not need this 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
Whitespace cleanup
Decouple Registry from Container

`Registry` is used for stateless factory / option registrations.

`Container` uses a `Registry` to lookup factories and options, and then
instantiates and caches objects.

This decoupling allows for multiple containers to reference a common
registry, which is key to allowing a single Ember app to support multiple
sessions.

`Container` is made backwards compatible by exposing many of its associated
registry's methods.

The concept of subcontainers (i.e. parent / children containers) was
removed as part of this refactoring. It was a legacy feature that's no
longer used within Ember core and has never been publicly documented,
so it's safe to remove without deprecation.
Convert Application to use both Registry & Container
Fix tests related to Registry / Container refactoring
Require a Registry instance to be passed into Container constructor
Remove comments / old tests / TODO related to Container refactor

Questions raised in comments and TODOs will be raised in the PR.
Improve docs for Container / Registry
Container constructor signature now takes `registry` as first arg

Also, change `Container#register` to private `Container#_register`
Introduce Registry#container method

This is the preferred method for constructing a Container based on its
associated Registry.
Initializers now expect a registry instead of a container
Implement deprecated lookup and lookupFactory on Registry

The first associated container created through registry.container() is
tracked as _defaultContainer. Calls to `lookup` and `lookupFactory` are
then forwarded to this container.

This prevents breaking Ember 1.x initializers that perform more than
registrations in their `initialize` methods.
Improve arguments check in Container#reset

As per @stefanpenner’s concerns, checking `arguments.length` is more 
strict and can prevent a reset of the entire cache if `fullName` is
mistakenly set to a falsey value.

Also, adds docs for `reset`.
Consolidate injection concatenation in buildInjections.
Remove items from caches before destroying the items.

If `member.destroy` errors, caches won’t be corrupted.
Prevent re-registration of factories that have been resolved.

An explicit `unregister` should be required to prevent re-registration
of a factory that has been resolved (and therefore probably used to
instantiate objects).
Replace some helper methods with inline implementations.

`addInjection`, `addTypeInjection`, and `initRules` are arguably more
clear inline rather than separate methods that take a large number of
arguments.
Base Container constructor assertion on boolean

Avoid the possibility that `registry` could be a function that could
be called as part of the assertion.
Ensure that registry.unregister() is called prior to register().

Also, clean up indentation inconsistencies.
Merge pull request #9702 from stefanpenner/__defineNonEnumerable

Allow opting out of enumerable-safety