Fix race when unlocking locks for a thread

The problem was that we unlocked the locks first after the thread was
marked as not alive. This opened a race for seeing a mutex as still
locked after a thread was joined, since that thread was seen as not
alive and not waited for while it was still terminating and unlocking
locks.

This would cause a sporadic spec failure like this:

1)
Mutex#locked? returns the status of the lock FAILED
Expected true to be false
           { } in Object#__script__ at spec/ruby/shared/mutex/locked.rb:31
  BasicObject(Object)#instance_eval at kernel/common/eval19.rb:45
      { } in Enumerable(Array)#all? at kernel/common/enumerable.rb:104
                         Array#each at kernel/bootstrap/array.rb:68
             Enumerable(Array)#all? at kernel/common/enumerable.rb:104
              Integer(Fixnum)#times at kernel/common/integer.rb:83
                         Array#each at kernel/bootstrap/array.rb:68
           { } in Object#__script__ at spec/ruby/core/mutex/locked_spec.rb:5
                  Object#__script__ at spec/ruby/core/mutex/locked_spec.rb:4
                        Kernel.load at kernel/common/kernel.rb:584
  BasicObject(Object)#instance_eval at kernel/common/eval19.rb:45
                         Array#each at kernel/bootstrap/array.rb:68
   Rubinius::CodeLoader#load_script at kernel/delta/codeloader.rb:68
   Rubinius::CodeLoader.load_script at kernel/delta/codeloader.rb:111
            Rubinius::Loader#script at kernel/loader.rb:648
              Rubinius::Loader#main at kernel/loader.rb:847

When we move this up we have to do an unlock / lock around it, since
unlock_locks would unlock all objects, also the thread itself, so we
need to lock it again.