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.
@bryanforbes I still don't have a good solution for this.  I have looked at ways of "polyfilling" under TypeScript and it seems there is no easy way to combine feature detection and class definition.  This mechanism "works" but obviously breaks some of the benefits of having TypeScript.