Issue #3605736: Preserve target site when following chained redirects
Cross-site redirect chains lost their site context: findByRedirect() inherited from RedirectRepository re-resolved the next hop with the current site instead of the redirect's target site, so a chain whose intermediate hop points at another site stopped one step early.
Override findByRedirect() to pass the redirect's target site_id into findMatchingRedirect(). Inject request_stack and redirect.prefix_list into the repository (also clears the redirect 1.11/1.12 constructor deprecation).
Adds a Kernel test reproducing an A->B->C chain that crosses sites.
Closes #3605736