Avoid using specific `G` classes for locks, always use the projection `lockG` of `lock`.
This MR is a follow up of !979 (merged).
Always preferring the projections is similar to the way we use acquire
/release
/etc.
This MR also adjusts the subG
instance to use lockG
instead of spin_lockG
, and tests that the conditions are resolved automatically when using adequacy.
TODO: I have only done this for spin lock, the same remains to be done for ticket lock, rw lock, atomic heap.