Add bound parameters to Service objects

You can now create service objects with a `params` hash that
contains top level parameters bound to all subsequent operation calls.
For example, to operate on an S3 object, you can use:

    var s3obj = new AWS.S3({Bucket: 'bucket', Key: 'key'});

    // no bound params passed to put or get calls
    s3obj.putObject({Body: 'text'}, function() {
      s3obj.getObject(function(err, data) {
        console.log("Got the data back", data.Body.toString());
      });
    });

Note that only toplevel parameters can be bound. These parameters
will also be automatically ignored for operations that do not use
these parameters. For example, we can still use the `s3obj` variable
to call `listObjects()`, even though that operation does not accept
a `Key` parameter:

    s3obj.listObjects(function(err, data) {
      console.log("Objects in my bucket", data);
    });