#1248, #1212: Move configuration to application-level

It is not possible to define plugins using user-specific
configuration defined using the `-c` option because the
user-specific configuration was (re)loaded during individual
commands and thus after the plugins were loaded.

With this commit I have moved the configuration loading to
the application level and with it simplified the process and
enabling configuring application-specific configuration using
a user-specific configuration file.
#1248: Rewired ServiceProviders and Config

In order to improve segregation between components I have moved their
configuration into their own namespaces and rewired the configuration
to match that.

In addition I have extracted parts of the Application class into their
own ServiceProviders because these match a configuration heading