Update README for new multiple indepenent pool design
multi-pool refactor part 1

Restructured the supervision tree. Each pool defined in config now
has a pooler_pool_sup supervising a gen_server for the pool and a
supervisor used to launch members for that pool.

This approach is better suited to pooling independent clients. Since
each pool is its own gen_server and mini supervision tree, problems
with one pool won't impact another pool as easily.

This refactor does not yet include revamped support for load balancing
pools.
Remove unused props_to_pool function

Functionality moved to pooler_config module
Add load balancing support using pg2 and an ets table

Pool configs with a group value other than 'undefined' are added to a
pg2 process group at pool startup. The pool joins the group when it
receives a timeout message triggered by init. This is done in order to
ensure that the pool is ready to serve requests as soon as it can be
seen as a member of a group.

In order to provide a simple API where only the group name is needed
to take and return a member, members that are access via the new
take_group_member/1 function are added to an ETS table that maps the
member pid to the pid of the pool to which the member belongs. When
returning a member via return_group_member/3 the ETS table is used to
locate the pid of the appropriate pool and return_member is then
called. At present the group name is not actually used upon return,
but keeping the symmetry seems reasonable and will allow more options
for some alternative implementations later if desired.

Whenever a member is returned, the code calls do_return_member and
this function now ensure that a call to clean_group_table is
made. Only when the pool's group value is other than 'undefined' this
function attempts to delete the entry for the member pid in the ETS
table that is used for tracking groups.

The pooler_sup is responsible for starting the ETS table. If a pool
crashes, it could orphan entries in the ETS table. The pg2 group will
remove processes that die.
Remove now unused functions max_free_pool and fold_max_free_count
Remove unreachable fun head for pool_add_retries
Remove unused start and stop functions from pooler module
Update metrics to be pool specific
Use metrics_mod stored in pool record in send_metric

The metrics module specified in app config is now stored as part of
the pool record. This allows send_metric in pooler.erl to determine
whether or not metrics are enabled by using data in the server state
rather than having to retrieve data from app config for each metric
send call. The only downside is duplicating the metrics module name
across all pools.

The default value is pooler_no_metric and will make calls to
send_metric a no-op.
Improve error message if pool config is missing a required entry
Cleanup fetching metrics module in pooler_sup
Use monitors instead of links to track members and consumers

pooler now tracks both members and consumers using monitors. This
means that named pools (pooler gen_server) no longer traps exits. A
crash of pooker will no longer crash consumers with checked out
members.
start members asynchronously using pooler_starter

Members are started using a pooler_starter server and returned to the
pool via pooler:accept_member.

Tests pass after using get_n_pids as needed to add retry since member
addition is now async and triggered by a take_member call.
Add a batch of new members on take when all in-use

When a take_member request is received and all members are in-use, the
pool will return error_no_members and trigger an async start of up to
init_count members.
Add start_members_sync/3 to pooler_starter

This function starts Count members in parallel and returns the list of
new member pids.
Initial pool with parallel start of init_count members
Remove members that timeout in starting state

Use global default timeout value of {1, min}. Members that take longer
than this period to start are removed from the start list and ignored
if the starter ever does come back.
Update example config for pool names as atoms
Remove unused code from pooler module
Improve test coverage for pooler module