Implement a function to upload individual parts
Make the message status check more strict
Fix a one-off error

partNumber starts from 1 in S3 API
Make `parts` an array of arrays instead of an array of objects
Implement an abort function to cleanup failed cases
Use upload_part instead of put_file_data

This enables multipart upload.