add assertion to catch a double ph_job_free()
avoid fault when printf'ing a null ph_string_t
extend epoch around the full set of events from epoll

The observation was that a mixture of timer and fd events coming back in
a batch would operate on the same job; one would cause the underlying
data to be ph_job_free()'d and reaped by the time the second one was
dispatched.

The equivalent to this should also be applied to the other nbio
implementations.

Also: fix missing mask assignment in the removal case.
sock: fixup stuck SSL sessions, tidy up free and affinity

* For async connects, round-robin over the emitters for the completion
  callback for better distribution.  You may use the new
  ph_thread_emitter_affinity() function to obtain an affinity value
  for the currently executing thread.  This is useful in cases where
  you create a job for a connected socket and want to maintain
  affinity with the connection callback thread (this is usually
  desirable in order to minimize the chance that you schedule the
  same fd in two different epoll instances on different threads)

* For longer lived SSL sessions and/or systems under load with a
  large number of concrrent SSL sessions, we observed that we could
  get stuck pending read with partial data in the read buffer.
  The data was actually read and staged somewhere in the SSL internals.
  Avoid getting stuck by performing a speculative read after a dispatch;
  if the read buffer size changed then we make another pass through
  the dispatch callback.  This looks fugly and can bias towards
  hot sessions, but works well in practice thus far.