Add Modes::Change and Modes::ChangeList
Populate a Modes::ChangeList object in ModeParser::Process()
Pass the modes to the OnMode hook as a Modes::ChangeList, pass ModeProcessFlags too
m_spanningtree Add function to serialize parameters in a Modes::ChangeList::List into MODE/FMODE format
m_spanningtree Send MODE/FMODE from the OnMode hook

If the MODE_LOCALONLY flag is set the mode change is not propagated
Remove ProtocolInterface::SendMode()
Compare Limits.MaxModes to the size of LastChangeList in ModeParser::Process()
Remove ModeParser::LastParseParams and GetLastParseParams()
Remove ModeParser::LastParseTranslate and GetLastParseTranslate()
Remove ModeHandler::m_paramtype and GetTranslateType()
Add mode process flag MODE_CHECKACCESS
Split out ModeParser::ProcessSingle() from Process()

This applies up to one MODE line's worth of mode changes from a Modes::ChangeList
Validate mode parameters from ModeParser::ProcessSingle()
Handle mode merges in ModeParser::ProcessSingle()
Split out ModeParser::ModeParamsToChangeList()
Make it possible to resume processing a partially processed Modes::ChangeList

Return number of processed mode changes from ModeParser::ProcessSingle() and add a begin index parameter
Add a ModeParser::Process() overload that can process an entire Modes::ChangeList

This is a wrapper that calls ProcessSingle() repeatedly until the entire changelist is processed
Replace irc::modestacker usage with the new ModeParser::Process()
Use Modes::ChangeList in ModeHandler::RemoveMode()
m_spanningtree Remove CommandFJoin::ApplyModeStack()