Map/Set: O(1) performance for numeric and string keys.

This ensures that we have O(1) performance for numeric keys as well as
string keys.  We prefix string keys with '$' to ensure there is no conflict
with the built-in __proto__ property, which even objects created with
Object.create(null) possess.
Lazy allocation of backing Map for Set.

Defer allocation of backing map in Set() until a non-numeric non-string
key is used.  This speeds up users which create Sets often by saving a
bunch of allocations in the common case.