moved `IncludedTemplate` into the regular template API, fixed more unittests

--HG--
branch : trunk
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index 9bf1e4d..8282bc6 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -441,14 +441,19 @@
             func_frame.identifiers.declared
         )
 
-        func_frame.accesses_arguments = False
+        func_frame.accesses_kwargs = False
+        func_frame.accesses_varargs = False
         func_frame.accesses_caller = False
         func_frame.arguments = args = ['l_' + x.name for x in node.args]
 
-        if 'arguments' in func_frame.identifiers.undeclared:
-            func_frame.accesses_arguments = True
-            func_frame.identifiers.add_special('arguments')
-            args.append('l_arguments')
+        if 'kwargs' in func_frame.identifiers.undeclared:
+            func_frame.accesses_kwargs = True
+            func_frame.identifiers.add_special('kwargs')
+            args.append('l_kwargs')
+        if 'varargs' in func_frame.identifiers.undeclared:
+            func_frame.accesses_varargs = True
+            func_frame.identifiers.add_special('varargs')
+            args.append('l_varargs')
         if 'caller' in func_frame.identifiers.undeclared:
             func_frame.accesses_caller = True
             func_frame.identifiers.add_special('caller')
@@ -598,14 +603,14 @@
             self.writeline('l_%s = ' % node.target, node)
             if frame.toplevel:
                 self.write('context[%r] = ' % node.target)
-            self.write('IncludedTemplate(environment, context, ')
+            self.write('environment.get_template(')
             self.visit(node.template, frame)
-            self.write(')')
+            self.write(', %r).include(context)' % self.name)
             return
 
         self.writeline('included_template = environment.get_template(', node)
         self.visit(node.template, frame)
-        self.write(')')
+        self.write(', %r)' % self.name)
         if frame.toplevel:
             self.writeline('included_context = included_template.new_context('
                            'context.get_root())')
@@ -729,8 +734,9 @@
         for arg in node.defaults:
             self.visit(arg, macro_frame)
             self.write(', ')
-        self.write('), %s, %s)' % (
-            macro_frame.accesses_arguments and '1' or '0',
+        self.write('), %s, %s, %s)' % (
+            macro_frame.accesses_kwargs and '1' or '0',
+            macro_frame.accesses_varargs and '1' or '0',
             macro_frame.accesses_caller and '1' or '0'
         ))
 
@@ -753,7 +759,10 @@
         for arg in node.defaults:
             self.visit(arg)
             self.write(', ')
-        self.write('), %s, 0)' % (call_frame.accesses_arguments and '1' or '0'))
+        self.write('), %s, %s, 0)' % (
+            call_frame.accesses_kwargs and '1' or '0',
+            call_frame.accesses_varargs and '1' or '0'
+        ))
         if frame.buffer is None:
             self.writeline('yield ', node)
         else: