We have this deepcopy utility in our public API, but it does not work
properly on structs with unexported values. Make a note of that, and
also disallow OutputState from being copied, since OutputState has
required unexported fields that we can't deepcopy.
Not sure if we should special case `OutputState` here, which I've done
since that has come up in particular, or maybe even disallow
deepcopy'ing any values that have unexported fields? That would be a
breaking change though, so I've shied away from it for now.
Fixes https://github.com/pulumi/pulumi/issues/16634
Certain operations in `engine/diff` mutate engine events during display.
This mutation can occur concurrently with the serialization of the event
for persistence, which causes a panic in the CLI. These changes fix the
offending code and add code that copies each engine event before
persisteing it in order to guard against future issues.