Sometimes we want to be able to pass in a sender that has not yet been fully constructed.
LateBoundSender can act as a placeholder to pass CanSend and CanSendAsync capabilities
through to the inner object. bind() should be called when the inner object is ready.
All calls to send() and send_async() through this wrapper will block until bind() is called.
Used to implement an async sender. An async sender is just a Sender whose
message is MessageWithCallback<M, R>
, which is a message plus a
callback function (which resolves the future that send_async returns).
Wraps a CanSend. This should be used to pass around an Arc<dyn CanSend>, instead
of spelling out that type. Using a wrapper struct allows us to define more flexible
APIs.