Need something better than client's `checkForStaleness`

If no message has been received on the datachannel on the client for SnowflakeTimeout (30 seconds), checkForStaleness closes the connection. The comment says this is to,

// Prevent long-lived broken remotes.

but there's no heartbeat at this level of abstraction so the connection is constantly being reset anytime the user pauses their activity (for example, to read a webpage).

This greatly exacerbated #21312 (moved)