Refactored internal implementation of defining an AWS client.
Moved S3 waiter customization to appropriate location.
Merge pull request #132 from petemounce/waiter_ec2_image

Waiter for EC2::Image to be available
Merge branch 'ec2_status_watchers' of https://github.com/petemounce/aws-sdk-core-ruby into petemounce-ec2_status_watchers
Moved S3 waiter customization to appropriate location.
Merge branch 'petemounce-ec2_status_watchers'

Conflicts:
	aws-sdk-core/apis/EC2.waiters.json
Renamed the EC2 instance status waiters from *Green to *Ok to match api values.
Added changelog entries for the new waiters.
Resolved a test failure.
Expanded documentation on the S3 pre-signed url generator.

Also moved a few integer literals into constants for readability.
Added Aws::S3::Object#presigned_url method.

This method uses the `Aws::S3::Presigner` to generate pre-signed
object URLs.

    s3 = Aws::S3::Resource.new
    obj = s3.bucket('aws-sdk').object('key').

    obj.presigned_url(:get)
    #=> "https://bucket-name.s3.amazonaws.com/object-key?..."

URLs expire in 15 minutes by default. You can configure the
expiration period and provide additional params:

    # url expires in one hour, the file upload will be
    # publicly accessible
    obj.presigned_url(:put, expires_in: 3600, acl: 'public-read')

Fixes #134
Query serializer no longer sends `nil` as empty value.

Fixes #133
Add waiters for ec2 instance status checks

* instance-status
* system-status

... because Windows instances take way longer to come up than non-Windows.
This is supposed to wait for password data to be available

(I notice that when it is not available, the property is an empty string, not `nil`)

... but instead
```shell
D, [2014-10-01T22:02:35.804411 #3624] DEBUG -- : Waiting for password... 0
E, [2014-10-01T22:02:36.050402 #3624] ERROR -- : Failed waiting for i-bfb993fd: waiter failed
E, [2014-10-01T22:02:36.051406 #3624] ERROR -- : waiter failed (Aws::Waiters::Errors::WaiterFailed)
C:/src/oss/aws-sdk-core-ruby/aws-sdk-core/lib/aws-sdk-core/waiters/waiter.rb:101:in `block in wait'
C:/src/oss/aws-sdk-core-ruby/aws-sdk-core/lib/aws-sdk-core/waiters/waiter.rb:86:in `catch'
C:/src/oss/aws-sdk-core-ruby/aws-sdk-core/lib/aws-sdk-core/waiters/waiter.rb:86:in `wait'
C:/src/oss/aws-sdk-core-ruby/aws-sdk-core/lib/aws-sdk-core/client.rb:75:in `wait_until'
```

based on
```rb
...
def wait_for_password(id)
  logger.debug "Waiting for password for #{id} to be available."
  pwd = @ec2.wait_until(:password_data_available, instance_id: id) do |w|
    w.before_attempt do |a|
      logger.debug "Waiting for password... #{a}"
    end
  end
  logger.info "Password data: #{pwd.password_data}"
  pwd
rescue Aws::Waiters::Errors::WaiterFailed => e
  logger.error "Failed waiting for #{id}: #{e.message}"
  logger.error e
  raise e
end
...
```
Add waiters for ec2 instance status checks

* instance-status
* system-status

... because Windows instances take way longer to come up than non-Windows.
Feedback