added loopcontrols extension and added unittests for it

--HG--
branch : trunk
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index 9bf0044..3b5f8c0 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -1018,8 +1018,8 @@
         self.macro_def(node, macro_frame)
 
     def visit_CallBlock(self, node, frame):
-        call_frame = self.macro_body(node, frame, node.iter_child_nodes
-                                     (exclude=('call',)))
+        children = node.iter_child_nodes(exclude=('call',))
+        call_frame = self.macro_body(node, frame, children)
         self.writeline('caller = ')
         self.macro_def(node, call_frame)
         self.start_write(frame, node)
@@ -1305,14 +1305,12 @@
 
         # if the filter node is None we are inside a filter block
         # and want to write to the current buffer
-        if node.node is None:
-            if self.environment.autoescape:
-                tmpl = 'Markup(concat(%s))'
-            else:
-                tmpl = 'concat(%s)'
-            self.write(tmpl % frame.buffer)
-        else:
+        if node.node is not None:
             self.visit(node.node, frame)
+        elif self.environment.autoescape:
+            self.write('Markup(concat(%s))' % frame.buffer)
+        else:
+            self.write('concat(%s)' % frame.buffer)
         self.signature(node, frame)
         self.write(')')