added arg_stringname function to _ast_util.py
This is to be compatible with python3.4 where kwarg and vararg
objects are _ast.arg as opposed to Name objects in earlier versions.
The _ast.arg object cannot be implicitly converted to a string. This
lead to 4 errors in the test suite.

As of this commit all tests pass under python3.4a2
diff --git a/mako/_ast_util.py b/mako/_ast_util.py
index 5b1a8e4..2c6cbc7 100644
--- a/mako/_ast_util.py
+++ b/mako/_ast_util.py
@@ -78,6 +78,15 @@
 ALL_SYMBOLS.update(CMPOP_SYMBOLS)
 ALL_SYMBOLS.update(UNARYOP_SYMBOLS)
 
+def arg_stringname(func_arg):
+    """Gets the string name of a kwarg or vararg
+    In Python3.4 a function's args are
+    of _ast.arg type not _ast.name
+    """
+    if hasattr(func_arg, 'arg'):
+        return func_arg.arg
+    else:
+        return str(func_arg)
 
 def parse(expr, filename='<unknown>', mode='exec'):
     """Parse an expression into an AST node."""
@@ -403,10 +412,10 @@
                 self.visit(default)
         if node.vararg is not None:
             write_comma()
-            self.write('*' + node.vararg)
+            self.write('*' + arg_stringname(node.vararg))
         if node.kwarg is not None:
             write_comma()
-            self.write('**' + node.kwarg)
+            self.write('**' + arg_stringname(node.kwarg))
 
     def decorators(self, node):
         for decorator in node.decorator_list:
diff --git a/mako/ast.py b/mako/ast.py
index 0d3f0b1..cd1d14e 100644
--- a/mako/ast.py
+++ b/mako/ast.py
@@ -8,6 +8,7 @@
 code, as well as generating Python from AST nodes"""
 
 from mako import exceptions, pyparser, compat
+from mako._ast_util import arg_stringname
 import re
 
 class PythonCode(object):
@@ -126,10 +127,10 @@
         for arg in argnames:
             default = None
             if kwargs:
-                arg = "**" + arg
+                arg = "**" + arg_stringname(arg)
                 kwargs = False
             elif varargs:
-                arg = "*" + arg
+                arg = "*" + arg_stringname(arg)
                 varargs = False
             else:
                 default = len(defaults) and defaults.pop() or None
diff --git a/mako/pyparser.py b/mako/pyparser.py
index 5499076..be292a8 100644
--- a/mako/pyparser.py
+++ b/mako/pyparser.py
@@ -11,6 +11,7 @@
 """
 
 from mako import exceptions, util, compat
+from mako._ast_util import arg_stringname
 from mako.compat import StringIO
 import operator
 
@@ -215,15 +216,14 @@
             self.listener.funcname = node.name
             argnames = [arg_id(arg) for arg in node.args.args]
             if node.args.vararg:
-                argnames.append(node.args.vararg)
+                argnames.append(arg_stringname(node.args.vararg))
             if node.args.kwarg:
-                argnames.append(node.args.kwarg)
+                argnames.append(arg_stringname(node.args.kwarg))
             self.listener.argnames = argnames
             self.listener.defaults = node.args.defaults  # ast
             self.listener.varargs = node.args.vararg
             self.listener.kwargs = node.args.kwarg
 
-
     class ExpressionGenerator(object):
 
         def __init__(self, astnode):