Fix the data channel handling so that there really is one bi-directional channel

Previously, we were trying to set up a single data channel, but due to not understanding the options for data channels, we were still setting up two data channels.

This changes us so that we use a manually negotiated id, which means we can call createDataChannel at both ends with the same id, and it'll connect each end to just the one channel.

This should make the data channel more reliable, and fix the case where it was being closed due to garbage collection happening.