Show a client error if the WebSocket connection closes

Instead of automatically reconnecting when the WebSocket connection dies for whatever reason, we show an error asking that the user refresh.

This PR also DRYs out our existing error handling a bit.
So that, in the event we decide that we want more than just categories and error-names (`[:category :error-name]`), we don't have to change these call-sites. e.g. we might want errors that aren't in a category, or we might want nesting more than 2 levels deep.