Pool slot is needed to add a connection to the pool. Poolslots have
a one to one mapping to connections inside the pool, and are used
to track the ‘total’ connections inside the pool
[PoolStorage] implements the storage part of a connection pool. This storage
also decides which connection it returns for a given ID or when the caller asks to
remove one, this results in the storage deciding which mode we use for connection
reuse and dropping (eg FIFO for reuse and LRU for dropping conn when pool is full)
ReqToConnID is used to convert a Request to a connection ID. These IDs are
not unique and multiple connections can have the same ID. IDs are used to filter
which connections can be used for a specific Request in a way that is indepent of
what a Request is.