This reworks the task locking and background worker shutdown logic.
Tasks are now refcounted so they can be executed concurrently while another thread removes them from the queue. In case the background worker can’t be cleanly shut down (due to slow network), the task queue is being dumped, but the background worker itself is not freed from the main thread, to avoid potential use-after-free bugs.
Also, the background worker itself is refcounted and owns its state.
The transport state is now owned by the background worker, and passed explicitly to the task send function. The task state itself was removed in favor of providing the envelope directly.
# Tests added:
* Object cloning and overwriting keys.
* Serializing more msgpack values.
* Forcing captured events to have a uuid event_id.
* JSON escapes and surrogate parsing, also fixing a bug for that.
* Discarding events when missing consent.
* Test and fix recording errors on current session.
* Sessions with username did.
* Lots of abnormal sessions on startup.
# Bugs fixed:
* Wrong JSON decoding with surrogate pairs.
* Memory Leak parsing unmatched surrogate pairs.
* Never recorded error counts on sessions.