Added WeakMap support

Observeds are now weakly referenced when WeakMap is available, which
means observe won’t interfere with GC anymore (as native Object.observe
obviously never did). When WeakMap is not supported, it falls back
to arrays.

Besides, strict mode is now isolated (see #14).