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)
{
    initialize();
    static const auto& test_one_input = *Assert(g_test_one_input);
#ifdef __AFL_HAVE_MANUAL_CONTROL
    
    
    __AFL_INIT();
#endif
#ifdef __AFL_LOOP
    
    
    const uint8_t* buffer = __AFL_FUZZ_TESTCASE_BUF;
    while (__AFL_LOOP(1000)) {
        size_t buffer_len = __AFL_FUZZ_TESTCASE_LEN;
        test_one_input({buffer, buffer_len});
    }
#else
    std::vector<uint8_t> buffer;
    if (argc <= 1) {
        if (!read_stdin(buffer)) {
            return 0;
        }
        test_one_input(buffer);
        return 0;