To share keepalive connections across all workers

Changes in V5:
 - Use bsearch() to speed up the searching of upstream servers.
 - Add "per_server" option for upstream's "keepalive" directive.
 - Should use ngx_exiting/ngx_quit to check process status.

Changes in V4:
 - Fix bug about initializing srv->idle_list.
 - Check process status before accessing shared memory.
 - Continue to fix some coding style.
 - Use ngx_process_idx as index when access idle_list.
 - Reclaim connection into idle_list when send fd failed.

Changes in V3:
 - Adjust some coding style.
 - Remvoe zero array in keepalive_shared_srv_t.
 - Remove assert().
 - Fix ngx_channel_handler().
 - Ignore connections when its owner process is dead.
 - Delete old shared memory when relaod Tengine.

NOTE: Please use 'git am --scissors xxx.patch' to remove these
      comments before scissors line when merging patches.
------------------------------------------------------------->8

In order to limit the number of connections for each upstream, it's
worth to share keepalive connections across all workers, so that idle
connections could be reused effectively by other workers.

* Features:
  - All operations on shared memory are lockfree, workers will hardly
    ever block each other.

  - To get idle keepalive connection from worker's local pool firstly,
    which could avoid unnecessarily transferring socket fd between workers.

  - Add "shared" option for upstream's "keepalive" directive. We can use
    this option to enable shared keepalive connections:

        http {
            upstream abc {
                ...;
                keepalive n shared [per_server];
                ...;
            }
        }

Signed-off-by: Yunkai Zhang <qiushu.zyk@taobao.com>