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.
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 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()
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.
Fixes #2028: LaunchConfiguration does not retrieve AssociatePublicIpAddress properly

This commit is a fix to a missing feature of pull request #1799
fixup! Fix parsing GetProductCategoriesForASIN response
Merge remote-tracking branch 'hltbra/develop' into launchconfiguration-associate_public_ip
Added unit test for #2029, #2028
Updated unit tests for #2028, #2029
Covered the missing ENV support.
whitespace cleanup
Added unit test for #1943