Add Spotify Connect via librespot subprocess source
`crates/stream/src/sources/librespot.rs` (Linux) spawns `librespot
--backend pipe --format S16 --device -` so the child writes raw S16LE
PCM at 44.1 kHz / 2ch to stdout. A tokio reader converts byte pairs to
i16 via `from_le_bytes` (endian-safe across cross-compile targets),
applies the existing per-stream gain, and pushes into the same
AudioSink as HLS/DASH. `kill_on_drop` on the Child reaps librespot
when `Player::cancel()` aborts the driver task. Stderr is mirrored to
tracing at debug.
Player gets a new `source: AtomicU8` (PlaybackSource: Hls/Dash/Spotify
/Unspecified) and shared `install(player, task)` helper so HLS/DASH
and Spotify use the same singleton-swap path. The HLS/DASH branch now
sets source from `ManifestKind` instead of inferring at status time.
Settings: new `[librespot]` block (enabled / binary / name / bitrate /
cache_path); when `enabled = false`, `StreamService.SpotifyStart`
returns FAILED_PRECONDITION. Non-Linux builds get a stub that returns
"librespot: linux only" so cross-platform dev compiles.
CLI: `zerod stream spotify start [--output ...]` / `stream spotify
stop`. `stream status` now prints `source=Spotify` etc.
This is a binary file and will not be displayed.