A small message envelope with sender, payload, and correlation ref.
Builds a message.
Builds a reply that preserves the original ref.
@type from() :: pid() | atom()
@type payload() :: term()
@type ref() :: term()
@type t() :: %Cairn.Message{from: from(), payload: payload(), ref: ref()}
@spec new(from(), payload(), ref()) :: t()
@spec reply(t(), payload()) :: t()