Adds caching to inverseFor and implements look for inverses on the other side

if the key is always a string, you can use a much cheaper and faster `Object.create(null)` for a safe dictionary. The Ember.Map is primarily for when the key needs a guidMarker. Like a function or object, and is more costly, as it also maintains key ordering.

see: https://github.com/emberjs/ember.js/blob/master/packages/ember-metal/lib/map.js#L192-L195