def acquire id, fiber
        if conn = @available.pop
          @reserved[id] = conn
        else
          Fiber.yield @pending.push(fiber)
          acquire(id, fiber)
        end
      end
def acquire id, fiber
        if conn = @available.pop
          @reserved[id] = conn
        else
          Fiber.yield @pending.push(fiber)
          acquire(id, fiber)
        end
      end
Acquire a lock on a connection and assign it to executing fiber
 - if connection is available, pass it back to the calling block
 - if pool is full, yield the current fiber until connection is available