Frontend realtime cleanup

While investigating how to improve the UI for the realtime component, it became clear that the streamer code could use some refactoring.

This PR moves the low-level networking tasks into a "streamer" service, simplifying the call sites for sending to the socket.