Implement take_member queueing

Take_member now supports request queueing! This feature allows for consumers to
specify a timeout during which a pool member may be returned to a caller. A
timeout of zero means that a member or error will be immediately returned.
Otherwise, take_member will defer replying to the consumer, setting a timer
to the duration of the timeout. When the timer pops, error_no_members will be
sent to the consumer. If during the timeout a new member is returned to the
pool, the requestor queue will be popped and that requestor will receive the
the member.