optimizer can optimize filtered for loops now

--HG--
branch : trunk
diff --git a/jinja2/runtime.py b/jinja2/runtime.py
index 676c1f5..fb2802e 100644
--- a/jinja2/runtime.py
+++ b/jinja2/runtime.py
@@ -15,7 +15,7 @@
 
 
 __all__ = ['subscribe', 'LoopContext', 'StaticLoopContext', 'TemplateContext',
-           'Macro', 'IncludedTemplate', 'Undefined']
+           'Macro', 'IncludedTemplate', 'Undefined', 'TemplateData']
 
 
 def subscribe(obj, argument):
@@ -190,6 +190,9 @@
             self.parent
         )
 
+    def __len__(self):
+        return self._length
+
     def make_static(self):
         return self
 
@@ -231,7 +234,7 @@
             arguments['l_caller'] = caller
         if self.catch_all:
             arguments['l_arguments'] = kwargs
-        return TemplateData(u''.join(self._func(**arguments)))
+        return self._func(**arguments)
 
     def __repr__(self):
         return '<%s %s>' % (