patch 8.2.3430: no generic way to trigger an autocommand on mode change

Problem:    No generic way to trigger an autocommand on mode change.
Solution:   Add the ModeChanged autocommand event. (Magnus Gross, closes #8856)
diff --git a/src/vim.h b/src/vim.h
index cb769e2..b7a6388 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -688,6 +688,8 @@
 #define TERMINAL        0x2000  // Terminal mode
 #define MODE_ALL	0xffff
 
+#define MODE_MAX_LENGTH	4	// max mode length returned in mode()
+
 // all mode bits used for mapping
 #define MAP_ALL_MODES	(0x3f | SELECTMODE | TERMINAL)
 
@@ -1317,6 +1319,7 @@
     EVENT_INSERTLEAVEPRE,	// just before leaving Insert mode
     EVENT_INSERTLEAVE,		// just after leaving Insert mode
     EVENT_MENUPOPUP,		// just before popup menu is displayed
+    EVENT_MODECHANGED,		// after changing the mode
     EVENT_OPTIONSET,		// option was set
     EVENT_QUICKFIXCMDPOST,	// after :make, :grep etc.
     EVENT_QUICKFIXCMDPRE,	// before :make, :grep etc.