Inspect error.response.body, not error.message

Recent versions of excon have a middleware component,
Excon::Middleware::Expects and fog requests mostly record an expectation
of a 200 status code. Some calls to AWS return status other than 200 and
in some cases the error handling obscures the underlying error.

Current handling parsed error.message; this instance of error is
constructed by excon and includes the response as an attribute. The
message is always something like 'Expected(200) <=> Actual(404 Not Found)'
and so the parsing never succeeds.

Instead we now attempt to parse error.response.body which should allow
extraction of the underlying AWS Code value, which in turn will produce
an exception that points to the actual underlying cause.
Add RDS API version parameter option.

RDS API has moved to 2013-05-15 and added additional methods and
parameters to existing ones (such as NewDBInstanceIdentifier in
ModifyDBInstance). It makes sense to use the new API version, however
it requires more testing and possibly implementing additional methods.
This commit allows the version to be passed when instantiating a fog
object, so that this can be done piece-meal, without blocking existing
fog users.

Refs: #1931
[openstack|image] Fix image reload

Instead of returning the cached image in collection, get (or find_by_id) method
should refresh the image data. This will fix the reload method, as actually it
doesn't really reload the image details.
Refactor error handling

Match against the error object in both the old (against error.message)
and the new (against error.response.body); return a hash from this
method.

In the rescue block, try hard to raise an exception that includes the
code and message extracted from the error.
Remove code from other branch-in-progress
Remove mistaken version update
Add nil check on metadata mock

The default value for metadata is nil, and this was raising NoMethodError on each_pair.
Add attachment check to detach_volume mock

If the attachment does not exist it raises a NoMethodError instead of NotFound.
Add array coalesce

If there are no entries for the server then it returns null,
but the code expects an array. Make it so.
Construct hash with => (for 1.8.7)
Merge pull request #1936 from blowmage/fix-openstack-mocks

Update OpenStack Mocks
Use specific error classes, not generic Fog::Compute::AWS::Error
Merge pull request #1934 from frodenas/openstack_images

[openstack|image] Fix image reload
Merge pull request #1932 from maginatics/rds_version

Add RDS API version parameter option.
Merge pull request #1935 from jbence/feature/update_AWS_error_handling

[aws] Update aws error handling