text: Title: Multithreading race condition when lazy loading NUMPY_TYPES 
  Body: The following code crashes randomly with "Illegal instruction" (tested with orjson 3.8.7 and 3.8.8):
  
  ```
  import orjson
  import multiprocessing.pool
  
  class X:
      pass
  
  def mydump(i):
      orjson.dumps({'abc': X()}, option=orjson.OPT_SERIALIZE_NUMPY, default=lambda x: None)
  
  # mydump(0)
  with multiprocessing.pool.ThreadPool(processes=16) as pool:
      pool.map(mydump, (i for i in range(0, 16)))
  ```
  
  Commenting out the mydump(0) call circumvents the issue (with CPython 3.8.13). When building without --strip and with RUST_BACKTRACE=1, the following call stack can be seen:
  
  ```
  thread '<unnamed>' panicked at 'Lazy instance has previously been poisoned', /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/once_cell-1.17.1/src/lib.rs:749:25
  stack backtrace:
     0: rust_begin_unwind
               at /rustc/2c8cc343237b8f7d5a3c3703e3a87f2eb2c54a74/library/std/src/panicking.rs:575:5
     1: core::panicking::panic_fmt
               at /rustc/2c8cc343237b8f7d5a3c3703e3a87f2eb2c54a74/library/core/src/panicking.rs:64:14
     2: orjson::serialize::numpy::is_numpy_scalar
     3: orjson::serialize::serializer::pyobject_to_obtype_unlikely
     4: <orjson::serialize::serializer::PyObjectSerializer as serde::ser::Serialize>::serialize
     5: <orjson::serialize::dict::Dict as serde::ser::Serialize>::serialize
     6: <orjson::serialize::serializer::PyObjectSerializer as serde::ser::Serialize>::serialize
     7: dumps
     8: cfunction_vectorcall_FASTCALL_KEYWORDS
               at /Python-3.8.13/build_release/../Objects/methodobject.c:441:24
     ...
  ```
  
  This happens no matter whether numpy is installed or not.