When a helper has no server programs left (e.g., because all started
programs, if any, have quit and no new programs could be started), drop
all queued helper requests, so that their corresponding master
transactions do not get stuck.
Existing handleFewerServers() already handles this situation by killing
Squid, but we must drop queued requests in other places (that can be
found by locating code that adjusts childs.n_active) because:
* that existing Squid-killing code effectively excludes several use
cases (e.g., it ignores common startup=0 helper configurations);
* handleFewerServers() may not be called in some relevant cases
(e.g., when no new servers were needed after a reconfiguration);
* handleFewerServers() may be followed by a helperOpenServers() call
(that may open new servers for handling queued requests); we do
not want to kill queued requests in those cases.
Squid may recover and successfully start another helper later, but
transaction X progress must not rely on an unrelated transaction Y
actions: If transaction Y does not show up or does not result in a
successful helper program start, then transaction X will continue to be
queued at the helper level, possibly forever (even request timeouts are
handled by individual helper server objects that we lack here).
Also significantly simplified HelperServerClosed() implementations.