Start members in init in parallel

The pooler_starter server is now a single-use process. Calling
pooler_starter:start_member creates a new server which will start a
member, notify pooler, and then exit normally. This means we won't
leak pooler_starter processes and don't have to add bookkeeping to
track them.

In addition, pooler_starter now allows for a raw message mode in which
the created member is sent to a process as a raw message rather than
via pooler:accept_member.

The init function in pooler makes use of the raw message mode of
pooler_starter:start_member to initialize members on startup in
parallel. This approach allows reuse of existing code via
do_accept_member, ensures that all processes are supervised (the
proc_lib:spawn cheat in pooler_starter for sync start is now gone),
yet blocks init until the initial count of members have been added.
Remove stale members when processing a failed accept member

Easier to reason about the state if we remove expired starting members
whenever we process a message.
Add pooler:manual_start to make testing in console easier