lots of changes surrounding the ability to rejoin a game on disconnection.
game is mostly playable.
minor refactoring of player join logic.
added an increased timeout.
fixed custom errors.

Also added a new custom error.
refactored connection logic, and client side services.

This is a large change that fixes several issues. Now we ensure we are always in the correct state, we don't attempt to perform any actions until we've correctly connected to the server, and it removes some of the complexity of reconnection. Seperation of concerns has been improved, as well as over all app stability.

One major change is that the game can be started with any number of players, but it immediately goes into a paused state if there are not enough.
Fixed a bug where the previous submitted responses weren't cleared.