Partially based on DOM Events. Works for normal ES objects. Requires ES.Harmony