gsignal: Reduce lock/unlock pairs and ensure we always work on valid signal nodes
Reduce the unlock events in signal emissions to the minimum, saving data around for emission to ensure that we won't work on the data that other thread might modify while unlocking for emitting signals.