moved caching from loaders to environment and added environment overlays

--HG--
branch : trunk
diff --git a/jinja2/utils.py b/jinja2/utils.py
index 5d8ca48..6a5c9a0 100644
--- a/jinja2/utils.py
+++ b/jinja2/utils.py
@@ -25,6 +25,10 @@
 _simple_email_re = re.compile(r'^\S+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+$')
 
 
+# special singleton representing missing values for the runtime
+missing = type('MissingType', (), {'__repr__': lambda x: 'missing'})()
+
+
 def contextfunction(f):
     """This decorator can be used to mark a callable as context callable.  A
     context callable is passed the active context as first argument if it