DIFFEO-142: modules can replace their own config

The use case for this is a configuration that contains a pointer to
an external file, that itself provides configurable things, so the
list of sub_modules isn't actually complete until after the configuration
is read.  Break this loop by reading the configuration, calling a
replace_configuration() hook, and reading the configuration again.