Continue working on ServerKit.
Replace weak pointers in ApplicationPool2 data structures with normal pointers

Weak pointers aren't necessary anyway because containing objects outlive
children objects. Using normal pointers reduces the number of reference count
changes.
Session object pooling
Optimize Options: use initializer list in constructor
Optimize time queries in ApplicationPool

Allow passing cached timestamps to ApplicationPool methods.
This saves some time querying calls.
Embed refcount into Session and use intrusive_ptr
Optimize ApplicationPool priority queues

This is done by increasing their arity. This improves CPU cache locality
despite needing more comparisons
Embed SocketList directly inside Process, instead of using a smart pointer. This removes an indirection
Store ApplicationPool socket strings in a palloc pool for better cache locality.
more string palloc stuff in applicationpool
Use raw system calls instead of OXT wrappers. Saves some atomic operations
Change ProcessList into a vector for better cache locality and less indirection
Get rid of the priority queue for processes.

Replace it with a simple linear search, which is faster than heap management.
Put process busyness levels in a compact array so that the linear scan is very fast for large numbers of processes.
Store one Group in SuperGroup in-place for better cache locality.