Revert should remove new properties

- Create copy of original state only once
- Iterate on own properties of current state instead of original
- Allows new properties to be 'unset' by setting them to `undefined`