patch 8.1.2019: 'cursorline' always highlights the whole line

Problem:    'cursorline' always highlights the whole line.
Solution:   Add 'cursorlineopt' to specify what is highlighted.
            (closes #4693)
diff --git a/src/option.c b/src/option.c
index aabfc7f..9070364 100644
--- a/src/option.c
+++ b/src/option.c
@@ -238,6 +238,7 @@
 #ifdef FEAT_SYN_HL
 # define PV_CUC		OPT_WIN(WV_CUC)
 # define PV_CUL		OPT_WIN(WV_CUL)
+# define PV_CULOPT	OPT_WIN(WV_CULOPT)
 # define PV_CC		OPT_WIN(WV_CC)
 #endif
 #ifdef FEAT_STL_OPT
@@ -993,6 +994,13 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
+    {"cursorlineopt", "culopt", P_STRING|P_VI_DEF|P_RWIN,
+#ifdef FEAT_SYN_HL
+			    (char_u *)VAR_WIN, PV_CULOPT,
+#else
+			    (char_u *)NULL, PV_NONE,
+#endif
+			    {(char_u *)"both", (char_u *)0L} SCTX_INIT},
     {"debug",	    NULL,   P_STRING|P_VI_DEF,
 			    (char_u *)&p_debug, PV_NONE,
 			    {(char_u *)"", (char_u *)0L} SCTX_INIT},
@@ -3228,6 +3236,9 @@
 #if defined(MSWIN) && defined(FEAT_TERMINAL)
 static char *(p_twt_values[]) = {"winpty", "conpty", "", NULL};
 #endif
+#ifdef FEAT_SYN_HL
+static char *(p_culopt_values[]) = {"line", "number", "both", NULL};
+#endif
 
 static void set_options_default(int opt_flags);
 static void set_string_default_esc(char *name, char_u *val, int escape);
@@ -6326,6 +6337,15 @@
     }
 
 #ifdef FEAT_SYN_HL
+    /* 'cursorlineopt' */
+    else if (varp == &curwin->w_p_culopt
+				  || gvarp == &curwin->w_allbuf_opt.wo_culopt)
+    {
+	if (**varp == NUL
+		    || check_opt_strings(*varp, p_culopt_values, FALSE) != OK)
+	    errmsg = e_invarg;
+    }
+
     /* 'colorcolumn' */
     else if (varp == &curwin->w_p_cc)
 	errmsg = check_colorcolumn(curwin);
@@ -10775,6 +10795,7 @@
 #ifdef FEAT_SYN_HL
 	case PV_CUC:	return (char_u *)&(curwin->w_p_cuc);
 	case PV_CUL:	return (char_u *)&(curwin->w_p_cul);
+	case PV_CULOPT:	return (char_u *)&(curwin->w_p_culopt);
 	case PV_CC:	return (char_u *)&(curwin->w_p_cc);
 #endif
 #ifdef FEAT_DIFF
@@ -11012,6 +11033,7 @@
 #ifdef FEAT_SYN_HL
     to->wo_cuc = from->wo_cuc;
     to->wo_cul = from->wo_cul;
+    to->wo_culopt = vim_strsave(from->wo_culopt);
     to->wo_cc = vim_strsave(from->wo_cc);
 #endif
 #ifdef FEAT_DIFF
@@ -11087,6 +11109,7 @@
     check_string_option(&wop->wo_stl);
 #endif
 #ifdef FEAT_SYN_HL
+    check_string_option(&wop->wo_culopt);
     check_string_option(&wop->wo_cc);
 #endif
 #ifdef FEAT_CONCEAL
@@ -11132,6 +11155,7 @@
     clear_string_option(&wop->wo_stl);
 #endif
 #ifdef FEAT_SYN_HL
+    clear_string_option(&wop->wo_culopt);
     clear_string_option(&wop->wo_cc);
 #endif
 #ifdef FEAT_CONCEAL