[FEATURE ember-metal-injected-properties] Added `InjectedProperty` descriptor

This adds a new `Descriptor` type for defining a property that does a
lazy lookup on an object's container. There is no public API addition
since this kind of property is easily abused. Instead it will be used by
internally `ember-runtime` API additions, where validation can happen.
Added `inject` namespace and injected property creation/validation

This adds a new property to the root namespace that provides computed
properties for container lookup that are enforced by type. This is to
disambiguate between other top level properties that are very similar.
Any ember module can create a new per-type injection helper by calling
`createInjectionHelper` and providing a mixin-time validation function.

The container has been modified to support validating lazy lookups
before instantiation through the factory's `lazyInjections` method which
returns an array of full container names that must be valid.
Added the `inject.controller` injected property helper

The helper restricts controller injections only to other controllers, so
it cannot be used on routes, views, etc.
Added `Ember.Service` and the `inject.service` injected property helper

This adds the base class for Ember 'services' and an injection helper
that makes referencing container-singleton services from routes,
controllers, views, etc. simple.
Merge pull request #5162 from slindberg/injected-properties

[FEATURE ember-metal-injected-properties] Injected properties