patch 8.0.1564: too many #ifdefs

Problem:    Too many #ifdefs.
Solution:   Graduate the +autocmd feature. Takes away 450 #ifdefs and
            increases code size of tiny Vim by only 40 Kbyte.
diff --git a/src/structs.h b/src/structs.h
index fe8c036..56af793 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -586,9 +586,7 @@
     int		lockmarks;		/* TRUE when ":lockmarks" was used */
     int		keeppatterns;		/* TRUE when ":keeppatterns" was used */
     int		noswapfile;		/* TRUE when ":noswapfile" was used */
-# ifdef FEAT_AUTOCMD
     char_u	*save_ei;		/* saved value of 'eventignore' */
-# endif
     regmatch_T	filter_regmatch;	/* set by :filter /pat/ */
     int		filter_force;		/* set for :filter! */
 } cmdmod_T;
@@ -1946,10 +1944,8 @@
     int		b_nwindows;	/* nr of windows open on this buffer */
 
     int		b_flags;	/* various BF_ flags */
-#ifdef FEAT_AUTOCMD
     int		b_locked;	/* Buffer is being closed or referenced, don't
 				   let autocommands wipe it out. */
-#endif
 
     /*
      * b_ffname has the full path of the file (NULL for no name).
@@ -1986,13 +1982,11 @@
 				   incremented for each change, also for undo */
 #define CHANGEDTICK(buf) ((buf)->b_ct_di.di_tv.vval.v_number)
 
-#ifdef FEAT_AUTOCMD
     varnumber_T	b_last_changedtick; /* b:changedtick when TextChanged or
 				       TextChangedI was last triggered. */
-# ifdef FEAT_INS_EXPAND
+#ifdef FEAT_INS_EXPAND
     varnumber_T	b_last_changedtick_pum; /* b:changedtick when TextChangedP was
 					   last triggered. */
-# endif
 #endif
 
     int		b_saving;	/* Set to TRUE if we are in the middle of
@@ -2171,9 +2165,7 @@
     char_u	*b_p_fenc;	/* 'fileencoding' */
 #endif
     char_u	*b_p_ff;	/* 'fileformat' */
-#ifdef FEAT_AUTOCMD
     char_u	*b_p_ft;	/* 'filetype' */
-#endif
     char_u	*b_p_fo;	/* 'formatoptions' */
     char_u	*b_p_flp;	/* 'formatlistpat' */
     int		b_p_inf;	/* 'infercase' */
@@ -2448,12 +2440,8 @@
 #endif
 
 #define SNAP_HELP_IDX	0
-#ifdef FEAT_AUTOCMD
-# define SNAP_AUCMD_IDX 1
-# define SNAP_COUNT	2
-#else
-# define SNAP_COUNT	1
-#endif
+#define SNAP_AUCMD_IDX 1
+#define SNAP_COUNT	2
 
 /*
  * Tab pages point to the top frame of each tab page.
@@ -2642,10 +2630,8 @@
 
     win_T	*w_prev;	    /* link to previous window */
     win_T	*w_next;	    /* link to next window */
-#ifdef FEAT_AUTOCMD
     int		w_closing;	    /* window is being closed, don't let
 				       autocommands close it too. */
-#endif
 
     frame_T	*w_frame;	    /* frame containing this window */
 
@@ -2676,10 +2662,8 @@
      */
     linenr_T	w_topline;	    /* buffer line number of the line at the
 				       top of the window */
-#ifdef FEAT_AUTOCMD
     char	w_topline_was_set;  /* flag set to TRUE when topline is set,
 				       e.g. by winrestview() */
-#endif
 #ifdef FEAT_DIFF
     int		w_topfill;	    /* number of filler lines above w_topline */
     int		w_old_topfill;	    /* w_topfill at last redraw */
@@ -2973,10 +2957,8 @@
     int		block_mode;	/* current operator is Visual block mode */
     colnr_T	start_vcol;	/* start col for block mode operator */
     colnr_T	end_vcol;	/* end col for block mode operator */
-#ifdef FEAT_AUTOCMD
     long	prev_opcount;	/* ca.opcount saved for K_CURSORHOLD */
     long	prev_count0;	/* ca.count0 saved for K_CURSORHOLD */
-#endif
 } oparg_T;
 
 /*
@@ -3160,18 +3142,16 @@
 
 /*
  * Struct to save values in before executing autocommands for a buffer that is
- * not the current buffer.  Without FEAT_AUTOCMD only "curbuf" is remembered.
+ * not the current buffer.
  */
 typedef struct
 {
     buf_T	*save_curbuf;	/* saved curbuf */
-#ifdef FEAT_AUTOCMD
     int		use_aucmd_win;	/* using aucmd_win */
     win_T	*save_curwin;	/* saved curwin */
     win_T	*new_curwin;	/* new curwin */
     bufref_T	new_curbuf;	/* new curbuf */
     char_u	*globaldir;	/* saved value of globaldir */
-#endif
 } aco_save_T;
 
 /*