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.
I misspoke. the `WeakMap` included in the default library of TS1.3 has a `clear()` method that is required which is no longer in the ES6 API. That being said, `WeakMapShim` should still be a generic.