We always create a code resource as marked initially

This ensures that if we create a new code resource after the object
storing it is already marked, we don't clean it up accidentally.

This can result in the code resource to be kept alive one more GC cycle
in cases where it's immediately discarded, but this is an unlikely
scenario with code resource objects.
Initialize inflated header marks with current mark

This ensures that we always see these as used. This does result in
inflated header potentially surviving one GC cycle longer, but this is
usually unlikely for objects that get inflated.
Remove unused detach flag
Use conditional check for running write barrier
Simplify write barrier usage
Simplify inflated header setup by removing -1 state

This is possible now because we initialize the inflated header with the
current mark anyway so it's already set as in use then.