Fix deadlock with lock inflation wakeups

This fixes a deadlock found running #3043. The deadlock occured when an
inflated header was being woken up and locked on the mutex_. This didn't
set the GC state properly so it would deadlock when a stop the world was
requested simultanuously.

This also fixes the hard_lock logic to retry if the locking sequence
gets interrupted. This is needed because we should not have interrupts
around that and have to defer the interrupt handling until after the
hard lock block.