Teach PostgreSQLAdapter#reset! to actually reset

It wasn't doing anything beyond clearing the statement cache.
Reap connections based on owning-thread death

.. not a general timeout.

Now, if a thread checks out a connection then dies, we can immediately
recover that connection and re-use it.

This should alleviate the pool exhaustion discussed in #12867. More
importantly, it entirely avoids the potential issues of the reaper
attempting to check whether connections are still active: as long as the
owning thread is alive, the connection is its business alone.

As a no-op reap is now trivial (only entails checking a thread status
per connection), we can also perform one in-line any time we decide to
sleep for a connection.
Constrain the number of unused connections kept in the pool

Just as we don't fill the pool with connections at boot, we generally
needn't maintain a full pool just because we once needed that many.