Add a new ServiceLocator and legacy implementation

ServiceLocator allows plugins to provide services really
conveniently.

The LegacyServiceLocator is backed by the PluginManager, and checks
for any compatible @Exported methods in loaded plugins. It will not
try to load any plugins that aren't currently loaded.

Issue: CLIENT-445
Change-Id: I61274dbb0b910509e0e170600e473eb23234bb6f
Reviewed-on: http://gerrit.dmdirc.com/3244
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Greg Holmes <greg@dmdirc.com>
Fix stupid reflection arguments.

These don't make any sense at all. I think I was on something.

Change-Id: I494a2956eb5b1812cbe7bcc29507316ab36758af
Reviewed-on: http://gerrit.dmdirc.com/3245
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Greg Holmes <greg@dmdirc.com>