copy object server rebased

rebased to develop branch. will be squashed in another branch/PR. addresses #548 .

- [ ] "All headers prefixed with x-amz- must be signed, including x-amz-copy-source."
- [x] code cleanup around `riak_cs_wm_object_upload_part`
- [x] dialyzer / xref
- [x] [multipart upload copy](http://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)
- [x] oos copy => will be done with #838
- [x] riak_test
- [x] use ETag: `x-amz-copy-source-if-match, x-amz-copy-source-if-none-match, x-amz-copy-source-if-unmodified-since, or x-amz-copy-source-if-modified-since` c.f. #855 
- [x] can change metadata
- [x] can't change storage class, `x-amz-storage-class`
- no versioning
- no lifecycle

TO BE DONE (maybe not in the scope):

- riak_test of `x-amz-copy-source-if-*` tags, including range
- oos copy & and its test
When I commented above, I probably (wrongly) thought this is a diff of `riak_cs_copy_object`, sorry...
If code can be simpler by accepting range in PUT Copy too, it's great. I don't have obsession like "S3 don't say anything about range in PUT Copy!!" :smile: 

If not, it seems sufficient with the current implementation (only for Upload Part Copy).