fix: #3625486 Search strings are output unescaped on the Zeitgeist report page

Security:
- Escape search strings in the multicolumn report.
- Filter the block separators with filter_xss_admin().
- Truncate recorded searches to the column lengths: longer ones failed with a 500.

Blocks:
- Apply the validation setting in the top searches block too.
- Escape the latest block's labels once, and emit rel="nofollow" at all.
- Leave block caching to Zeitgeist, per role, and skip it at 0 minutes.

Install and settings:
- Drop the file-level xautoload() calls, and keep .install free of module classes.
- Remove every variable on uninstall; fix update 7001's cache bin.
- Allow saving 0-minute cache durations; stop rebuilding module data on the settings form.

Reports and Views:
- Link Views report searches through a field handler instead of a path rewrite.
- Scope the contextual link to the zeitgeist view; require access site reports.
- Survive a missing dblog report and non-numeric day counts.
- Start quarter spans on the right month.

Also:
- Stop rewriting a variable on every search.
- Store the search path from the search page, like the search block.
- Fix PHP 8.1 and 8.2 deprecations.
- Updates 7002 (no core block cache) and 7003 (notice about [#3625488]).
- Refresh docs, headers and links.

By: fgm