Support AWS SDK's default params

Hello @tylerneylon, 

This adds support for default parameters, which the AWS SDK supports. Specifically, the changes:

* Update the AWS shim to support default params
* Adds test using default params
* Adds support for not passing a params object if all of your params are already set as defaults

The newly supported use would look something like this.

```javascript
var AWS = require('aws-sdk')
var Canoe = require('canoe')

// This sets up the s3 object with all of the params we need
var s3 = new AWS.S3({params: {
  Bucket: 'bucket-name',
  Key: 'file.txt'
}})

function canoeStreamCallback(err, stream) {
  // If it turns out that you were missing requires params, you'll get an error here
  if (err) return console.error(err)

  stream.end('Hello world')
}

// Now we're not going to pass any params to canoe
canoe.createWriteStream(canoeStreamCallback)

// You can also override defaults for specific instances
canoe.createWriteStream({Key: 'another-file.txt'}, canoeStreamCallback)
```

Please review the following commits I made in branch 'es-handle-default-params'.

c3db2028b4a178ba274aa55a7a4ebbe590b20d5d (2013-12-10 18:15:22 -0800)
Make params argument to createWriteStream() optional
If all of your params have been setup as defaults then you may not need to pass any params. You'll get an error if any required params (Bucket and Key) are missing.

3f67db252efa26b6f7eec3c1aa6368cd68581cef (2013-12-10 18:05:57 -0800)
Update old name

d23b788f2eaa9ecb2ccad98f9151a14afed20c83 (2013-12-10 17:47:48 -0800)
Fallback to S3Stream params being an empty object
If the S3 object was created with default params, this could legitimately be null-ish

ce4df71a16480f322ffb2cb937bed653b56ec060 (2013-12-10 17:44:45 -0800)
Explicitly check that UploadId is defined

ca4adf3a2b691ac1399445762d1a3f489e33c6b9 (2013-12-10 17:22:34 -0800)
Support default params in shim S3 constructor

R=@tylerneylon