[runtime] Change the way the runtime waits for threads to finish. Instead of detaching them at thread startup and waiting for them using WaitForMultipleObject(), add threads to a hash table before they exit mono code and use the finalizer thread to call pthread_join () on them. This will hopefully fix the problems where a thread tried to access data which the runtime at shutdown/appdomain unload.