Remove unnecessary '?' from req.path on POST

The if/else logic in add_auth on line 491 only handles if qs and POST.

But if you're POSTing with no query string, execution falls into the else condition on line 497 and an unnecessary '?' is added with a blank query string.

My elastictranscoder.create_job calls were failing due to the unnecessary '?' in the path. It would return:

JSONResponseError: 403 Forbidden
{u'message': u"When Content-Type:application/x-www-form-urlencoded, URL cannot include query-string parameters (after '?'): '/2012-09-25/jobs?'"}

I'm not sure why, but the bug only happens when running on Google App Engine. My local dev_appserver was able to make the create_job request just fine.
Return the x-amz-restore header with GET KEY and fix provider prefix.

Currently x-amz-restore is only supported by HEAD KEY but GET KEY also
returns the header when it has been successfully restored and the
restored key is awaiting expiry. Fixed the provider 'x-amz-' prefix
part so that it's consistent with other standard headers. Previously,
it was hardcoded.

This patch is hard to automate a test for as transitioning to GLACIER
and restoring back from GLACIER both take time. This change has been
manually tested.
Added tests around opting-in on SigV4 for S3.
Throw an exception if using SigV4 w/o a host.
Extracted the common config altering bits.
Added ``validate`` kwarg to ``Bucket.get_key``.

This allows the user to avoid hitting the service if they know a key already exists.
Added get log files from RDS
add the function get_all_log function
clean some codes
changed according to advice from  toastdriven
Adjust comments to match code in RDSConnection.get_all_logs()
Make optional RDSConnection.get_all_file argument optional
Added unit tests for RDSConnection.get_all_logs()
Fixes limit problem on table.query (#1998)
Merge remote-tracking branch 'TracyWebTech/fix_ddb_limit' into fix_ddb_limit
Added to unit test for #1998, #2014
Make the Lifecycle Id optional and fix prefix=None in XML generation.

The id is optional in the AWS PUT Lifecycle API. Boto currently
always sets the Id to 'None' if you set the rule directly.
Fix the XML generation to not send the Id if id is None.

If prefix is not set on a Rule, Boto generates a prefix for the
string 'None' which is not a good default value. Instead
generate the empty string for the prefix if not given so that
it matches all Objects in the bucket.

Modified the add_rule() API to allow the id to be optional which
also forced making other parameters optional by specifying
defaults. This makes adding simple rules easier though and is
backwards compatible.

Added 2 test cases to test the changes.
Fixed typo in Table.create example
Fixed conflict between limit and max_page_size in dynamodb2.ResultSet
Fix parsing GetProductCategoriesForASIN response

The amazon mws GetProductCategoriesForASIN api call
returns multiple <Self> nodes (if available), but
the code returned only the last XML node.