Join on connect, make joins idempotent.

Should fix the double-join issue you attempted to fix before, while also maintaining the ability to rejoin when reconnecting after a disconnect. Additionally, this removes the duplicate socket.join call from app.js, and makes it so that if a socket tries to join a channel it was already in, we don't re-send all the chats.

And it fixes the problem where users couldn't use the channel 'false' or '0'!