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.