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
cache resolveHelpers expensive ’-‘ check
cache costly firstSegment extraction
cache isGlobalPath
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.
introduce a pathCache for various costly and constantly repeating tasks
actually cache normalize on the container, so it gets all resolvers.