Creates a new oneshot channel, returning the sender and receiver halves. Sender and Receiver cannot be copied, and only a single message can ever be sent through the channel.
send() never blocks, and either inserts the message into the channel or straight into the receiver. Calling send() more than once is UB, as is calling recv()/tryRecv() after a message has been received.
This function does not require a runtime, and can be run in both synchronous and asynchronous contexts.