Refactor the client/transport contract so that there is less per-transport error handling, especially of timeouts. This should give us more uniform reconnection recovery across transport types.