Refactor internal interfaces for clarity
Move from Config-objects-with-private-members to a full separation of configuration and runtime types, which simplifies a lot of interface boundaries between different parts of the code.
More specifically, the Server is a lot leaner and its functionality is clearer. Backends also have a slightly improved interface.