A cross-browser object property observer uses ES6 proxy underneath and with fallback on dirty-checking