The command or three-digit numeric, as it arrived. Commands are case-insensitive on the wire,
so compare with [Message::is] rather than ==.
The parameters, with the trailing parameter last and its : removed.
The source, when the line carried one.
The tag section, empty when the line carried no @.
A parsed protocol line.
The types are owned rather than borrowed from the input. A borrowed
Message<'a>would parse faster, but every consumer of this crate reaches it across a language boundary that cannot carry a Rust lifetime, so the copy has to happen somewhere and here is the only place it happens once.