Don't destroy the encoding of strings passed to get_body_size

Fog uses `Fog::Storage.get_body_size` in a bunch of storage adapters to work out the size of the content being uploaded. The current implementation means that the encoding flag on the `body` string of that upload is mutated to a different (likely incorrect) encoding. This change makes `get_body_size` operate on a copy of the string when calculating the number of bytes in it.

We were hitting this when uploading a file containing a "£" to S3. After that, the string becomes unusable (usually in the form of raising an `Encoding::UndefinedConversionError`).
This was to use the `Gem::Version` stuff in the specs (closest to in-built semver implementation there is). In Ruby 1.8.x, `rubygems` isn't there by default, so it needs requiring to do the version check.