No need for intermediate variable
Cleanup since only test used special constructor

This test can also use the constructor the rest of the system uses, so
we can clean it up.
Fix thread shutdown race condition

This ensures we can tear down the roots and thread data structures
outside of using them in the GC. There was a race possible where we
would be iterating threads in the GC while an entry was removed. This
was possible because the deconstructor for VM would run outside a GC
dependent block.