Use WeakMap if userData API is not available
Collection based on ES6 Map