some parsing guts. messages parse themselves

a raw string is tokenized, then the tokens are sent to the appropriate
message type to fully parse out.

a single class can handle multiple IRC message types if the EBNF is the
same