First extension interface documentation and updates in that interface

--HG--
branch : trunk
diff --git a/jinja2/environment.py b/jinja2/environment.py
index 4134103..e771dd6 100644
--- a/jinja2/environment.py
+++ b/jinja2/environment.py
@@ -51,13 +51,13 @@
 
 def load_extensions(environment, extensions):
     """Load the extensions from the list and bind it to the environment.
-    Returns a new list of instanciated environments.
+    Returns a dict of instanciated environments.
     """
-    result = []
+    result = {}
     for extension in extensions:
         if isinstance(extension, basestring):
             extension = import_string(extension)
-        result.append(extension(environment))
+        result[extension.identifier] = extension(environment)
     return result
 
 
@@ -255,11 +255,11 @@
         if cache_size is not missing:
             rv.cache = create_cache(cache_size)
 
-        rv.extensions = []
-        for extension in self.extensions:
-            rv.extensions.append(extension.bind(self))
+        rv.extensions = {}
+        for key, value in self.extensions.iteritems():
+            rv.extensions[key] = value.bind(rv)
         if extensions is not missing:
-            rv.extensions.extend(load_extensions(extensions))
+            rv.extensions.update(load_extensions(extensions))
 
         return _environment_sanity_check(rv)