implemented a bunch of tests and fixed a bug with the shim's scope where it wasn't returning the new notifier if this.notifier was set. Re-implemented Util.traverse() since it didn't work with Arrays. @sbezboro @brianr