* Clear heartbeat and queue when disconnected
* Give clearer error in case configure fails due to a lost connection. Used to throw 'Packet does not exist'
* If the queue processing error is due to a lost connection, throw it instead of looping endlessly
* In case we send a disconnection event we don't need to also throw
* Catch heartbeat errors
* Also handle invalid state errors
* Handle socket timeouts
* Log heartbeat failures
* Make linter happy
* Transform stream being a singleton prevented reconnection attempts
* Adapt tests to not using singleton
* Aborting already ends the connection