Driver level connection pooling.

Implement pooling within the driver to limit the number of connections
to the database using a semaphore channel.