Pub sub message wrapping structure
Builds a pub sub message
@type input_message() :: atom() | {message(), any()}
@type message() :: atom()
@type t() :: %Box.PubSub.Message{ from: pid(), message: message(), metadata: map(), params: any(), topic: String.t() }
@spec new(message(), String.t(), Keyword.t()) :: t()