This doesn't work for values that are objects. You'd need to use [`_.isEqual`](http://lodash.com/docs#isEqual) for that.

Also, this doesn't take care of layers. `Scope.set` looks at the return value of `set` from the layers to see if it should set the dirty flag, so the `set` method of the layers needs to also check to see if the value is changing for real.