wasm: play extension-less URLs + stream big files (don't buffer whole)
Two fixes for playing arbitrary server URLs (e.g. /tracks/<id>):
1. Format detection no longer relies on the URL extension (there often isn't
one). Sniff the file's magic bytes (fLaC/OggS/RIFF/ftyp/ID3/frame-sync/…),
then fall back to Content-Type, then the URL extension.
2. Don't wait for the whole file before playing. MP3/AAC are self-syncing, so
they're now decoded progressively in ~32 KB segments as they download —
playback starts within ~a second and memory stays bounded (a big file is
never held whole). Non-self-syncing formats (FLAC/Ogg/ALAC/…) still buffer
then whole-file decode, since a mid-file chunk has no header.
Refactor: the live-radio segment loop is extracted to runSegmentLoop and
shared by live streams and streamed-finite MP3/AAC. A `streaming` flag keeps
play/stop/state correct for streamed (non-seekable) sources.
Trade-off: streamed MP3/AAC isn't seekable and reports duration 0 (segment
mode); seekable playback still applies to the buffered formats.