Introduce mono_runtime_init_tls to centralize all of the late runtime TLS initialization.
TLS initialization must be done as early as possible since runtime initialization
might be intermingled with 3rd party code running that sometimes create additional
slots. Those extra TLS slots do interfere with AOT compilation that might see a
different set of offsets when compiling than when running.
The current piece of problem is AOT image loading. If the AOT image is not found,
the dynamic linker in 10.9 will create a TLS slot to hold error data. AOT image
loading is triggered in between the creation of the runtime TLS slots.
Since AOT image loading never happens during compilation, the dynamic linker
would never create the slot and things would otherwise remain working.
The solution is to move all TLS initialization to before any assembly is loaded
and, transitively, AOT image loading.