Fixes #14891 database connection pool performance regression

This is alternative to pull request #14919 that does not include the GenePool dependency and appears to have similar performance.

Pushes locking down to the collection level so that all other work can be performed
outside of a lock. Such as connection creation, connection verification and even
connection removal

Addresses significant slow down when multiple threads attempt to checkout
connections at the same time. Would take as much as 3 seconds to get an
existing database connection with 100 concurrent threads.