Do not change request content with extra properties.

Avoid dirtying the request content with extra properties. Instead create a separate holder
to keep track of the request properties and the system properties.
diff --git a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
index 11e7383..0b28263 100644
--- a/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
+++ b/archetype-common/src/main/java/org/apache/maven/archetype/generator/DefaultFilesetArchetypeGenerator.java
@@ -64,6 +64,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
@@ -215,14 +216,17 @@
 
                 Binding binding = new Binding();
 
+                final Properties archetypeGeneratorProperties = new Properties();
+                archetypeGeneratorProperties.putAll( System.getProperties() );
+
                 if ( request.getProperties() != null )
                 {
-                    request.getProperties().putAll( System.getProperties() );
+                    archetypeGeneratorProperties.putAll( request.getProperties() );
+                }
 
-                    for ( Map.Entry<Object, Object> entry : request.getProperties().entrySet() )
-                    {
-                        binding.setVariable( entry.getKey().toString(), entry.getValue() );
-                    }
+                for ( Map.Entry<Object, Object> entry : archetypeGeneratorProperties.entrySet() )
+                {
+                    binding.setVariable( entry.getKey().toString(), entry.getValue() );
                 }
 
                 GroovyShell shell = new GroovyShell( binding );