Services

This is an attempt to make custom AsyncMultiService usable inside an advanced master.cfg or a buildbot plugin.

You can start review by looking at the doc in the end of the patch. I hope this explains the idea.

This is more of a question of semantic, but this ReconfigurableServiceMixin looks odd to me, especially when used in the test at line 37: if isinstance(svc, ReconfigurableServiceMixin).

I would rather have this class derive from Service, a reconfigurableService being a service which implements the reconfigService method.

Then, at line 229, I would rename ReconfigurableService as ReconfigurableMultiService and swap what reconfigService does from ReconfigurableServiceMixin and ReconfigurableService.