speedup + cleanup Map, MapWithDefault, OrderedSet

map now uses a dictionary as backing structure, this enables us to
safely use x[y] for existence checks rather then in, and enumerate
without needing slow hasOwnProperty checks. Also prefer super properties
existing directly on the prototype.

* Seperate OrderedSet, Map and MapWithDefault into seperate files.
* MapWithDefault now correctly subclasses Map
* Map now no-longer uses OrderedSet as a backing store for its keys.
introduce a pathCache for various costly and constantly repeating tasks
actually cache normalize on the container, so it gets all resolvers.