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.
Improved "whitebox" testing for Map/Set.

Since we know that numeric and string keys are handled differently in
our Map/Set implementation, add more exhaustive tests to ensure that
numeric and string keys are not confused for each other, that all the
"weird" numbers work correctly, and that the implementation is correct
in both "fast" and "slow" modes.
Map/Set: Workaround for older browsers which don't have Object.create().
Use test status badges from forked cscott repo, so I can see if this all works.