code: public static <T extends Config> T getOrCreate(Factory factory, Object key,
                                                     Class<? extends T> clazz, Map<?, ?>... imports) {
          T existing = get(key);
          if (existing != null) return existing;
          T created = factory.create(clazz, imports);
          T raced = add(key, created);
          return raced != null ? raced : created;
      }
docs: Gets from the cache or create, an instance of the given class using the given imports.
  
  @param factory   the factory to use to eventually create the instance.
  @param key       the key object to be used to identify the instance in the cache.
  @param clazz     the interface extending from {@link Config} that you want to instantiate.
  @param imports   additional variables to be used to resolve the properties.
  @param <T>       type of the interface.
  @return          an object implementing the given interface, that can be taken from the cache,
  which maps methods to property values.