Added form.reset()
Reverted behaviour of hasChanged - blowing away the cache on every data mutation is enough