This way we don't allocate an untagged wake data, and we don't need a
type tag. On the other hand we have to roll a more complicated seqlock,
but that's fine.
Also switch to require C11 atomics.
* libguile/atomics-internal.h: Remove fallback for when we don't have
C11 atomics.
(scm_atomic_ref_uint32, scm_atomic_swap_uint32, scm_atomic_set_uint32):
New helpers.
* libguile/threads-internal.h:
* libguile/async.h:
* libguile/async.c: Inline the thread wake data. Happily, waking a
remote thread is still wait-free from both sides.
Allows us to inline the "struct scm_dynamic_state", avoiding an untagged
traced allocation.
* libguile/threads-internal.h: New file.
* libguile/Makefile.am (noinst_HEADERS): Add new file.
Adapt all users, notably of SCM_I_CURRENT_THREAD and scm_i_misc_mutex.