Move unload_data to the heap and it can outlive the initiator.

The unload thread stores TRUE to the done field when unloading
ends so the initiator can break out of the wait loop in case its
thread doesn't belong to the domain been unloaded but was still
aborted.

This means that the initiator could be gone when the unload
thread stores into the done field. This is now a random write
to the thread stack, which has a high chance of causing crashes.

The solution is to move the unload_data to the heap and refcount
it so we can release it safely.
Perform TLS offset detection during startup.

	* mono-suppport-x86.c (mono_mach_init): Probe TLS slots using an
	unlikely canary. Right now only two offsets are known.

	* mono-threads.c (mono_threads_init): Initialize mach from here
	as remote TLS reads are required for mono-threads to work.
Fix configure.in detection of -Wunused-but-set-variable support under clang.