extract es5-sham Object.create(null) shim

source: https://github.com/es-shims/es5-shim/blob/master/es5-sham.js
introduce ember-metal/dictionary

This introduces an inheriting object (typically used with a null prototype) and hints to v8 (and other runtimes) that it should never go into “fast” map mode.

Clearly this last part sounds incorrect, why shouldn’t every go into fast mode. Unfortunately for unstable objects used as a cache (with a large number of unknown keys) they may be promoted to fast mode, only to quickly be demoted again. This is demotion is often costly and unwanted.

Please note this does increase the team it takes to create the dictionary (over just {})
use ember-metal/dictionary to cache resolve normalization and name parsing
remove inheriting dict in-favor of Object.create(null) + ember-metal/dictionary
speedup map

map now uses a dictionary as backing structures, this enables us to safely use x[y] for existence checks rather then in, and enumerable without needing slow hasOwnProperty checks. Also prefer super properties existing directly on the prototype.
actually cache normalize on the container, so it gets all resolvers.
introduce Ember._Cache still private API
utilize Cache object
cache firstSegment
Merge pull request #5220 from stefanpenner/perfs3.0

Perfs3.0