Better fix changed attributes

Previous PR (https://github.com/Versal/versal-gadget-launchers/pull/29) was not enough, this fixes some corner cases better (see tests)
Ok. This will do a deep match, which is good, but the reason we deep-match here but only delete top-level keys isn't immediately obvious. Worth a comment (or a more descriptive method name)?