Collections polyfill v2

This is implementation contains WeakMap, which is combining 2 different ways of containing values.
1, default behavior) Store Value in Key.
2) Store Value in WeakMap
Also, if key is non-hashable object - key and value will be stored in ArrayMap. But it is very rare case.
Non-hashable object means it can't contain special hash-object, that defines by traceur runtime.

Based on disscuss at https://github.com/google/traceur-compiler/pull/910