Provide a WeakMap Polyfill

This provides a polyfill that matches the current draft ES6 specification for WeakMap.  It addresses issue #2.

It adds a simplistic UID generation as `lang.getUID()`.

It provides a WeakMap polyfill that offloads to the native implementation when detected.
According to [this](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap), `set()` should return the `WeakMap`.