Improve legacy layer service initializaation

Previously there were subcomponents of the legacy layer that took a Context
and initialized some Service references themselves without the LegacyService
knowing it had these dependencies.

Now the LegacyService knows about all dependencies it has and it passes
appropriate services down to its subcomponents as needed. This fixes lurking
initialization bugs.

There are still a couple context.getService(serviceClass) calls pertaining
to switching to legacy mode that have not been updated.