patch 8.0.0655: not easy to make sure a function does not exist

Problem:    Not easy to make sure a function does not exist.
Solution:   Add ! as an optional argument to :delfunc.
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 531bd0e..519cd08 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -426,7 +426,7 @@
 			NEEDARG|WORD1|TRLBAR|CMDWIN,
 			ADDR_LINES),
 EX(CMD_delfunction,	"delfunction",	ex_delfunction,
-			NEEDARG|WORD1|CMDWIN,
+			BANG|NEEDARG|WORD1|CMDWIN,
 			ADDR_LINES),
 EX(CMD_display,		"display",	ex_display,
 			EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN,
diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim
index 6f5a73f..c09e234 100644
--- a/src/testdir/test_vimscript.vim
+++ b/src/testdir/test_vimscript.vim
@@ -1390,6 +1390,16 @@
     set verbose=0
 endfunc
 
+func Test_delfunction_force()
+    delfunc! Xtest
+    delfunc! Xtest
+    func Xtest()
+	echo 'nothing'
+    endfunc
+    delfunc! Xtest
+    delfunc! Xtest
+endfunc
+
 "-------------------------------------------------------------------------------
 " Modelines								    {{{1
 " vim: ts=8 sw=4 tw=80 fdm=marker
diff --git a/src/userfunc.c b/src/userfunc.c
index de089bb..34da2ef 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2807,7 +2807,8 @@
     {
 	if (fp == NULL)
 	{
-	    EMSG2(_(e_nofunc), eap->arg);
+	    if (!eap->forceit)
+		EMSG2(_(e_nofunc), eap->arg);
 	    return;
 	}
 	if (fp->uf_calls > 0)
diff --git a/src/version.c b/src/version.c
index 1e7d648..533660f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    655,
+/**/
     654,
 /**/
     653,