Fix bug as in previous fix, but with multi-token argument.

The previous fix added FUNC_MACRO to a production one higher in teh
grammar than it should have. So it prevented a FUNC_MACRO from
appearing as part of a mutli-token argument rather than just alone as
an argument. Fix this (and add a test).
diff --git a/glcpp-parse.y b/glcpp-parse.y
index ea27184..400f138 100644
--- a/glcpp-parse.y
+++ b/glcpp-parse.y
@@ -94,7 +94,7 @@
 %lex-param {void *scanner}
 
 %token DEFINE FUNC_MACRO IDENTIFIER NEWLINE OBJ_MACRO REPLACEMENT TOKEN UNDEF
-%type <str> FUNC_MACRO IDENTIFIER OBJ_MACRO REPLACEMENT TOKEN word
+%type <str> argument_word FUNC_MACRO IDENTIFIER OBJ_MACRO REPLACEMENT TOKEN
 %type <string_list> argument macro parameter_list
 %type <argument_list> argument_list
 
@@ -165,18 +165,14 @@
 ;
 
 argument:
-	word {
+	argument_word {
 		$$ = _string_list_create (parser);
 		_string_list_append_item ($$, $1);
 	}
 |	macro {
 		$$ = _string_list_create (parser);
 	}
-|	FUNC_MACRO {
-		$$ = _string_list_create (parser);
-		_string_list_append_item ($$, $1);
-	}
-|	argument word {
+|	argument argument_word {
 		_string_list_append_item ($1, $2);
 		talloc_free ($2);
 		$$ = $1;
@@ -189,6 +185,13 @@
 	}
 ;
 
+argument_word:
+	IDENTIFIER { $$ = $1; }
+|	TOKEN { $$ = $1; }
+|	FUNC_MACRO { $$ = $1; }
+;
+
+
 directive:
 	DEFINE IDENTIFIER REPLACEMENT {
 		_define_object_macro (parser, $2, $3);
@@ -225,11 +228,6 @@
 	}
 ;
 
-word:
-	IDENTIFIER { $$ = $1; }
-|	TOKEN { $$ = $1; }
-;
-
 %%
 
 string_list_t *