FutureSeq / gcholder referentially unsafe due to shallow copy
https://github.com/status-im/nim-chronos/blob/357baa52a0ea3da699c8229d97230c7f4340da92/chronos/transports/stream.nim#L1612

the above technique creates an unexpected reference to a variable that's passed in by value - this goes against the value semantics normally expected in nim - to make this safe, a copy should be used instead:

```nim

var data = @[u8 0]

var fut = stream.write(data)
data[0] = 42'u8 # either 0 or 42 will be written here, depending on stream state
await fut
```
there exist optimizations to avoid the copy in most cases - for example, if the data can be written to the socket directly without going through the event loop. it's possible that macros can be further optimized to detect when the seq is uniquely referenced and make better code as well - likewise, temporaries can be eliminated with move support etc etc


the `pointer` versions of the `write` API could be fixed (and optimized) in a similar way, or simply removed. since the `seq` version would make a copy anyway, it could be replaced with an `openArray` variant instead.