Flatten service pyramid

The way services and aspects were composed was a bit of an intimidating pyramid. Splitting them up into a flat list of aspects and the core service object is more readable.
I worry that I'll never get done as by itself its low importance enough to be ignored. But yes, this PR does improve the codebase by itself.