Introducing DOM observers

@brentkelly when testing compose, `api.dom.composes()[0].id()` returns a number `1415592618008` which fails the `email_data()` since `this.id` is an int