Reducing AR::ConPool's critical (synchronized) section

This is an alternative (much lighter in scope) PR to #14926, only the smallest possible amount of code is changed.

The objective is to:
 * move connection verification outside of `synchronized` section -> 3590eea
 * move connection establishment outside of the `synchronized` section -> 6eda088

This should allow for more concurrency. Related: #14891, #14919.

As per @matthewd's suggestion:
 * remove synchronization from around the `@reserved_connections` cache -> ca85c48
> If a thread dies without releasing its connection, will this cache hang on to it indefinitely?

Yes, unless there is a running `Reaper` that handles a case like this. Note that this is not a regression, since a connection object holds a reference (via `@owner`) to the thread that checked it out and a pool holds references to its connections (either via `@connections` or previously via `@reserved_connections`).

> How does this compare to using thread-locals directly, like `thread[:"_connpool_#{id}_cached_connection"]`?

No improvement, a dead thread will still be referenced from a conn-pool.