3021: Do not compute etag for initial model state unless/until actually needed.
Profiling shows that making a copy of the attributes hash (which
modelinstance.attributes() does) is much faster than
md5(attrs.inspect). Given that md5(attrs_when_loaded) is never needed
in the common case where a model gets loaded but never changed or
written back to the database, it's better to just stash a copy of the
attributes hash when loading, and defer computing the md5 until
it's time to write a log entry.