Generalize DI usage

This commit ensures that:

* an `InstanceFactory` is created in the Log4j `Provider`,
* the same factory is injected as parameters to all
  the components of the chain `Log4jContextFactory`, `ContextSelector`,
  `LoggerContext` (child), `Configuration` (grand-child).
* `DI.createInstanceFactory` is called only when strictly necessary.
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
index 5454ad7..b4f2ff0 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/config/Log4j1ConfigurationFactory.java
@@ -19,9 +19,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.AbstractConfigurationFactory;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.ConfigurationException;
-import org.apache.logging.log4j.core.config.ConfigurationFactory;
 import org.apache.logging.log4j.core.config.ConfigurationSource;
 import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
 import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
@@ -35,7 +35,7 @@
 //
 // Best Value?
 // @Order(50)
-public class Log4j1ConfigurationFactory extends ConfigurationFactory {
+public class Log4j1ConfigurationFactory extends AbstractConfigurationFactory {
 
     private static final String[] SUFFIXES = {".properties"};
 
@@ -51,7 +51,7 @@
     }
 
     @Override
-    protected String[] getSupportedTypes() {
+    public String[] getSupportedTypes() {
         return SUFFIXES;
     }
 }