[ServiceDiscovery] Now requires OSC services lazily

* Services are now treated as plugins
  * Services register with ServiceDiscovery
  * Registration is explicit: responsibility belongs to Service to
    self-register
* Currently only supports OSC
  * TODO: Add mutator to register providers, e.g. rackspace, hp
  * provider name could then be used in the require path for the
    service
  * Would attempt to load from OSC then OSC providers as registered

Guiding philosophy: Services should encapsulate information about their
discovery as much as possible.  Spreading information about a single
Service across multiple classes makes OSC harder to maintain.

Downside: ServiceDiscovery becomes a bit more complex.

Please bear in mind that minimal refactoring has been done at this
point.  There are a bunch of public class methods to be moved around
later if we go this route.