Spawning threads prior to `__AFL_INIT` is not supported as the afl++ fork server can't clone threads, see [afl++ docs](https://github.com/AFLplusplus/AFLplusplus/blob/stable/instrumentation/README.persistent_mode.md#3-deferred-initialization).

We however have chosen to do this in several of our targets (e.g. process_message, process_messages) and as a result those targets can not be fuzzed using afl++ (resulting in timeouts). Afaict this is only a problem if the spawned threads are also used (e.g. `join`) in the target.

A potential fix would be to call `initialize` after `__AFL_INIT` but prior to `__AFL_LOOP`, which will however lead to slower fuzzing for all targets.

(I'm uncertain why oss-fuzz does not report the timeouts to us but that seems like an issue on their end)
std::ofstream out_stream{out_path, std::ios::binary};
        for (const auto& [name, t] : FuzzTargets()) {
            if (t.opts.hidden) continue;
            out_stream << name << std::endl;
        }
        should_exit = true;
    }
    if (should_exit) {
        std::exit(EXIT_SUCCESS);
    }
    if (const auto* env_fuzz{std::getenv("FUZZ")}) {
        
        static std::string g_copy{env_fuzz}; 
        g_fuzz_target = g_copy.c_str();      
    } else {
        std::cerr << "Must select fuzz target with the FUZZ env var." << std::endl;
        std::cerr << "Hint: Set the PRINT_ALL_FUZZ_TARGETS_AND_ABORT=1 env var to see all compiled targets." << std::endl;
        std::exit(EXIT_FAILURE);
    }
    const auto it = FuzzTargets().find(g_fuzz_target);
    if (it == FuzzTargets().end()) {
        std::cerr << "No fuzz target compiled for " << g_fuzz_target << "." << std::endl;
        std::exit(EXIT_FAILURE);
    }
    Assert(!g_test_one_input);
    g_test_one_input = &it->second.test_one_input;
    it->second.opts.init();
}
#if defined(PROVIDE_FUZZ_MAIN_FUNCTION)
static bool read_stdin(std::vector<uint8_t>& data)