This is a nested array whose top-level keys are 'app' and 'site', denoting
the origin of a service provider. Site-specific providers have to be
collected separately, because they need to be processed last, so as to be
able to override services from application service providers.