Use Data.Pool for connection pooling

This PR adds the following:

1. Data.Pool  for session pooling
2. Configurable timeout when establishing new sessions to cassandra nodes
3. Configurable timeout for read/write io ops
4. Simple server stats to  allow clients to determine distribution of connections across servers.
5. hslogger to log useful information regarding pool  activity
6. Minor cleanup to fix warning about unused imports & vars
7. Unreachable servers are marked down and will not be tried again for new sessions until a back off period elapses, configurable by piBackoffOnError. Any exception during read/write (other than CassandraException which originate from the server) will mark the server down as well.