Apparent garbage collect of localCopy in datagram sendTo before data gets send in writeDatagramLoop
We've been hitting an issue in our uTP implementation in Fluffy where garbage data would be send over the wire (UDP).

It occurs on nim-chronos#head, but bisecting the commits points at this commit as first occurance: https://github.com/status-im/nim-chronos/commit/f5ff9e32ca4bd45781426246e4fb6b9fcceff0c2

What I think that happens is that the  `localCopy` var (https://github.com/status-im/nim-chronos/blob/92acf68b04070dfe8eb65bab71fbf63804979a16/chronos/transports/datagram.nim#L967) gets GC'ed before the data gets send in the `writeDatagramLoop` (https://github.com/status-im/nim-chronos/blob/92acf68b04070dfe8eb65bab71fbf63804979a16/chronos/transports/datagram.nim#L431)

What supports this theory is that adding a `GC_ref(localCopy)` as quick test did make the issue no longer occur.

I've tried to minimized to small testcase, but apparently minimized too far as I could no longer reproduce. I'll still try to create a reproducible testcase. 
For now, one way to reproduce is to run this `nim c -r -d:release ./tests/utp/test_protocol.nim` on this branch of nim-eth:  https://github.com/status-im/nim-eth/pull/654

It should be noted that the send data code in nim-eth uTP (https://github.com/status-im/nim-eth/blob/a6942e3a303d75e2d4b59242eb7a4f35fc331deb/eth/utp/utp_socket.nim#L455) isn't exactly pretty but it doesn't look fully "illegal" either.

That being said, this change on nim-eth uTP side does appear to fix the issue: https://github.com/status-im/nim-eth/pull/655/commits/7b21a48099169b357caffd23a21cddfce0a95cf1

Similar code exists for the TCP version (https://github.com/status-im/nim-chronos/blob/master/chronos/transports/stream.nim#L2299), so perhaps a similar issue is possible there too.






