Set now checks if the set value is different than the original value before setting isDirty

Also fixed a bug where unsetting something didn't create originalData as part
of this fix