[Fix] upstream consumers: make NULL/nil branches sound
A NULL guard is only useful if the branch behind it logs the failure,
propagates it correctly to the caller, and leaves internal state
consistent. Re-audited every NULL/nil-upstream branch (pre-existing
and newly added by this branch) and tightened the silent or
state-corrupting ones:
* fuzzy_backend_redis: the three rspamd_upstream_get NULL branches in
read / count / version paths invoked the caller's callback with an
empty result and returned silently. Admins had no signal that fuzzy
was being skipped because every backend was dead or pending DNS.
Each branch now also msg_err_redis_session's the reason.
* libserver/http_connection.c: when ctx->http_proxies is configured
but every proxy upstream is unavailable, the code silently fell
back to a direct connection - a security/privacy footgun for
configs that meant to force traffic through a proxy. Added an
msg_info to surface the fallback so the admin notices.
* lua_redis prepare_redis_call: the previous patch in this branch
marked skipped servers as "tempfail" but did not insert a
placeholder into `options`, so the load_script_task /
load_script_taskless consumer loop's iteration index no longer
matched the original servers_ready index. A successful upload to
one server would then write "done" into the wrong slot of
servers_ready (the slot for a different, possibly skipped server),
corrupting the script-load state machine. Insert a `{ skip = true,
upstream = s }` placeholder so the indexes stay aligned, and skip
the placeholder in both consumer loops.