Add connection pool

Add a ConnectionPool to the public api so that clients can pool
connections in order to reduce network overhead when creating many
different connections to the server