Consistent obligation state locking

State variable is now properly locked to ensure visibility and consistency under happens-before memory models.
It is guarded by the same mutex defined in dereferenceable.

Every class implementing Obligation has been changed according to the new locking policy.