Add built-in UPnP MediaRenderer — cast to fin from any control point
New fin-mediarenderer crate advertises the machine as a UPnP AV
MediaRenderer while the TUI runs: SSDP presence (alive/byebye +
M-SEARCH answers), device/SCPD description XML over a tiny embedded
HTTP server, AVTransport / RenderingControl / ConnectionManager SOAP
control, and GENA LastChange eventing.
Pushed streams drive the shared LocalRenderer, so audio decodes
in-process via symphonia and video opens in mpv. Cast-in tracks are
badged "⇊ UPnP" in the Now Playing bar with a one-shot status line,
and are excluded from scrobbling (their ids are foreign to the media
server).
Enabled by default; disable with --no-media-renderer,
FIN_NO_MEDIA_RENDERER, or media_renderer.enabled = false. The
friendly name and port are configurable, and the device UDN is
generated once and persisted so control points recognize the machine
across restarts.
Also: LocalRenderer now reports the audio player's real volume while
idle (UPnP GetVolume exposed the 100% snap-back), and a pre-existing
clippy never_loop error in discovery.rs is fixed.