Fixed special characters in filename for putFile()

If headers are included, name header is not passed through any
escape operations, so files with unicode characters will throw
mystery errors in your application.  I've included relavent
tests that fail if the filename header is included.

I've added a helper function to the client to retrieve the key
used for the `x-amz-meta-filename` header (as it can be cased
different ways).  I then use that to set an escaped filename in
the merged headers, if passed.