fix: Frozen hash manipulation
I'm on the fence about the Hash manipulation in JsonLogger.
So far, hashes are being updated in-place for efficiency, which is a valid point. On the other hand, the mutability aspect might change a hash which is being logged, but re-used in subsequent calls that expect a certain value of a certain type, and it mysteriously changes -- e.g. the Time that becomes a String (formatted according to RFC3339).
I've identified this issue while working on gitlab-org/gitlab!218779 (merged), more precisely, this pipeline failure https://gitlab.com/gitlab-org/gitlab-foss/-/jobs/12747964355.
The solution implemented here duplicates frozen hashes to avoid the hash manipulation issues. A regular hash will still be updated in-place -- I'm not sure I like this, but also, making it less efficient always does not seem smart.