[GH105] Extract service module code - WIP

**Still a work in progress - Please do not merge**

This is another step in moving towards a cleaner provider/service registry.

This uses general conventions that most providers adhere to and some
workarounds to attempt to require either `fog/provider/service` or `fog/service/provider`
then initialise `Fog::Service::Provider` or `Fog::Provider::Service`

So this eliminates a lot of the provider specific stuff behind the abstraction code for
`Fog::Compute[:provider]`

There is unfortunately still a little lookup table for providers that reformatted their names so
`:providername` != `require "fog/provider_name"` != `class Providername`

Additional overloading has also been lost here, notably `:version` options.

There is also an underlying implementation issue where the current default of
`Fog::Service::Provider` works in most cases except a few newer extractions and the
fallback works. The fallback is the preferred form `Fog::Provider::Service`.

Unfortunately `fog-brightbox` and `fog-softlayer` have implemented `Fog::Provider::Service`
as modules for support classes and so do not respond to `new`

So this triggers in the current (legacy) non-preferred order until those providers
are fixed.