Add dirty tracking
Clear dirty attrs on encrypt too

When we call `#encrypt_callback`, we need to account for "re-encrypting"
attributes. This occurs when we save a record with encrypted attributes, and
none of the encrypted attributes have actually been changed (dirty). If this
is not done, ActiveModel thinks that these attributes are dirty and will
attempt to update them even if it is not necessary.