[Feature] Auto-mark whitelist symbols with SYMBOL_TYPE_FINE flag
This change ensures that symbols with negative weight and symbols used
in whitelist composites (composites with negative score) will always
execute regardless of whether the reject threshold has been reached.
Previously, when the early-stop optimization kicked in after reaching
the reject score, whitelist symbols could be skipped, leading to
potential false positives where emails should have been whitelisted.
Changes:
- Symbols with negative weight are automatically marked as FINE during
config validation in symcache::validate()
- New rspamd_composites_mark_whitelist_deps() function traverses all
composites with negative score and marks their constituent symbols
as FINE (with transitive expansion for nested composites)
- New C API rspamd_symcache_set_symbol_fine() to programmatically set
the FINE flag with proper parent/child propagation
- FINE flag is properly synchronized between virtual symbols and their
parent symbols