Implementation of in-process infrastructure (library and thread context handles, in-process connection)
Backends and library frontends require some basic infrastructure in order to communicate properly. Most importantly, every thread must have its own kj async io context, but also access to the central shared data store. We therefore need to provide library and thread handles, which store these things.
An important issue here is whether the cache should be called directly or a virtual interface. The virtual interface could help with binary compatibility, but the cache is expected to be used frequently. I am currently leaning towards the non-virtual approach, but then I have to be mindful of downstream libraries linking to different versions.