more unittests and updated documentation for extensions.  Fixed bug in optimizer that caused blocks to be optimized away under some circumstances.

--HG--
branch : trunk
diff --git a/jinja2/optimizer.py b/jinja2/optimizer.py
index 5b95c99..8f92e38 100644
--- a/jinja2/optimizer.py
+++ b/jinja2/optimizer.py
@@ -34,6 +34,10 @@
 
     def visit_If(self, node):
         """Eliminate dead code."""
+        # do not optimize ifs that have a block inside so that it doesn't
+        # break super().
+        if node.find(nodes.Block) is not None:
+            return self.generic_visit(node)
         try:
             val = self.visit(node.test).as_const()
         except nodes.Impossible: