Remove data race between *Conn.Close() and *Conn.reader()

A single channel is now used to signal that the connection was closed.
There is also no need to set the net.Conn field to nil as this was causing a nil pointer dereference in the reader loop.