Emit on change, deep copy objects

* Only emit on change
* Deep copy all objects on input and output
* Add keypath access
* Fix nested `.wait()`