Test and document the existing Fog::Service class
Extract setting cleaning code to utility class

`Fog.symbolize_credentials` is actually a `Hash.symbolize_keys`
implementation with an exception for Headers.

Whilst it appears to be related to credentials (which is an assortment
of class methods around a Hash not an class) it is only used by
Fog::Service.

This extracts it as a start of a shared utility class whilst various
bits of randomness are pulled to sensible places.
Refactor code to handle service options
Break down setup_requirements to smaller parts

Note that a number of providers require each model when collections are
declared so the `require_models` step was almost redundant due to that
approach being used throughout fog.
Extract extra long version of CamelCase

This had been using Array/Range magic to do String#capitalize and
joining with the default argument.
change the default interval to a proc that returns exponential interval
Update specs to use asserts

Core team have decided to use asserts rather than must expecations
within minitest/specs.
fix a typo
Merge pull request #32 from fog/cleanup_service_settings

Cleanup Fog::Service settings
Allow objects to bypass Service's global config

Up to now you had to accept that if `~/.fog` exists on a system that
it's values were likely to be merged into any service by the reference
to `Fog.credentials`.

One solution was to load your own credentials and pass the settings
through to services. However the cleaning of the Hash still merged the
settings with the global and created a new Hash.

This also encouraged each service to do it's own authentication
internally by passing in values like `username` and `password` then
requesting a token that was isolated to that service.

That made it unsuitable for passing one configuration object that is
shared between multiple services where both may want to change something
such as the latest, valid authentication token.

This change allows any object that responds to `config_service?` with
`true` to bypass the global merging, parsing, coercion etc. and be
passed directly to a service.

That allows services to dispense with primitive obsession and use tested
objects to configure their services.

Resolves fog/fog#1390
Fix Fog::Service spec for Ruby 1.8.7

Subtle parsing difference > 1.8.7
Update docs to be clearer

The examples were for the top level Service builder but the lower level
Provider based version. The higher level one does not accept config yet
(and the object needs to declare which Provider it can work with).
Add doc for new functionality

More than just an example.
Add example for generating a Mock service
Passing specs for existing behavior
Initial removal of Rackspace specific conditional
Moved provider assertion earlier allowing removal of explicit return
Oops! Looks like Rackspace scopes the file correctly in the library
but differently in the module namespacing.
Merge pull request #30 from fog/remove_rackspace_from_identity

Removes rackspace-specific logic from identity
Merge pull request #34 from fog/gh1390_allow_external_credentials

Allow objects to bypass Service's global config