Refactor in-place dirty checking to use the attribute object
Merge pull request #15755 from sgrif/sg-dirty-refactor

Refactor in-place dirty checking to use the attribute object