Always attempt to set the content-type
refactor content_type() and add object_replace(), tests

Addresses issues #214, #409, and incorporates pull request #406.

content_type() was trying to do too many things in line, making it
hard to read.  Split the part that gets the mime-type via reading a
file into a helper function.  This lets the command-line-provided
--mime-type override file-detected methods.

Raise ParameterError if file is stdin and no --mime-type or
--default-mime-type has been provided.

Split object_replace() out from object_copy().  Yes, they are
similar.  No, they're not identical.  This lets us change the MIME
type of a file via 's3cmd modify'.

Add test cases to change the MIME type via 's3cmd modify'.
read/modify/write on modify command the headers and ACL

When calling modify, S3 normally resets headers and ACLs to a default
we probably don't want.

Keep the header and ACL the same (unless that's what is being
modified) by reading the header and ACL before invoking the modify,
then write the ACL after the modify completes.
clarify sanitize_headers() list
add --remove-headers option, used in [modify]

The [modify] command starts off by making a copy of all the headers on
the source object, then applying them to the destination object.

This patch lets us remove a header from an object using the [modify]
command.  When the copy of the source object headers are made, we then
remove headers from the remove-headers list, then issue the PUT with
the reduced set of headers.
bugfixes in content-type fixes

S3 implicitly handles copying headers.
Can't concatenate tuples and lists.
tests: modify command doesn't need --acl-public anymore

The modify command now preserves the original ACL, so we don't need to
specify --acl-public anymore to have it have the proper ACL.
[modify] only change mime-type if it's passed on the command line

or if expliclty put into the config file (but that would be odd).
tests: [modify] add and remove cache-control header

This tests the --add-header and --remove-header functionality.

This also adds a dependency on curl to run these tests.
tests: s/curl/wget/

because we already use wget elsewhere, but not curl.
[modify] compare headers in lowercase

s3:// seems to always return us headers in lowercase,
while http:// may return mixed-case (e.g. "Cache-Control").

For our purposes, we only case about lowercase comparisons.
Delete the lower-case version of the header

We just tested that the lower-case version of the header was in the
dict keys.  Then we proceed to delete without using lower().  Whoops.

This patch calls del header[h.lower()] to delete the key we just
tested was present.
Merge pull request #428 from mdomsch/bug/content-type

Bug/content type