a few more changes

1) The two implementations of Locker aren't behaving the same way, `unlock` is only supposed to return the value if the keys match, but the IORef implementation doesn't check them. Also, I don't see why we would need to put Nothing in the IORef after reading it, so I removed the write.

2) The UseGHC flag is useful to compile the IORef implementation with GHC, I don't see a reason to remove it.