leave() called stopScreenShare() and stopWebcam() without awaiting them, so
their renegotiations fired at peers that were closed a few lines later, and
their continuations ran up to eight seconds after the user had gone. If the
user rejoined and started a new share in that window, the stale continuation
nulled the new screenStream and flipped isScreenSharing off. Both stop
methods now take a teardown option that skips the renegotiation round and
releases the capture immediately; leave() uses it.
shareScreen, startWebcam, switchCamera and switchInputDevice awaited each
peer in turn. Each peer is an independent RTCPeerConnection, so they now run
concurrently and the last viewer no longer waits on everyone before them.
The stream debug logger kept appending peer state changes after disable(),
because its peer and screenSharers patches never checked the flag. It now
records nothing while disabled and caps the buffer at 5000 entries while
enabled.