!str #15121 MaterializerSettings now uses a config object

* it's now easier to create a FlowMaterializer(), which will use the default (see akka-streams/.../reference.conf) configuration
* kept methods to easily overload some values of the settings (used to be done via copy())
* made some apply() duplication trade-offs in FlowMaterializer companion for nicer API
* made it possible to set namePrefix from Java API

Resolves #15121
I think the passed in `Config` should be the config section containing the properties, instead of a top level config.
Then the user can define several such materializer config sections, and use:

    MaterializerSetting(system.settings.config.getConfig("my.stream-a")
    MaterializerSetting(system.settings.config.getConfig("my.stream-b")