fix: audio routing, WebSocket reconnection, inverted chat list
- Set audio mode once at startup instead of per-playback (fixes Bluetooth/CarPlay disconnect)
- Add AppState listener to force WebSocket reconnect on foreground resume
- Add 20s heartbeat ping/pong to detect zombie sockets after network switch
- Rewrite MessageList with inverted FlatList (WhatsApp-style bottom-anchored)
- Add reverse pagination: load last 50 messages, pull more on scroll up
- Wire loadMoreMessages/hasMoreMessages from ChatContext into chat screen