NgxConnection: single event mechanism for NgxFetch and NgxBaseFetch

Abstract the pipe communication into NgxEventConnection, for reuse
by NgxBaseFetch and NgxUrlAsyncFetcher.

Based on Chai's earlier work, but with a few fixes discovered
while working on this and SPDY module compatibility

- Uses less file descriptors, I expect this to be faster but need
  measurement is needed to back that.
- Fixed NgxUrlAsyncFetcher actually shutting down its fetchers.
- Fixes a bug where we wouldn't clean idle pooled NgxConnections.
- Fixes a bug for requests that are unlucky enough to be finalized mid-IPRO lookup.
- Makes us use ngx_handle_read_event/ngx_del_event

Note: this needs a few more manual tests,  and I also want to ensure 
this uses ngx_handle_read_event/ngx_del_event correctly. That aside,
I think this is ready for review.
`CreateNgxConnection()` is called later on, which calls `ngx_add_event_channel()` which needs `cycle` to be passed in, so it's imposed upon us here.