add streamable bucketio

##### Problem

Want to be able to stream to S3 buckets


##### Solution

Add bucket_io to allow multipart_upload to s3, the idea is i would replace: https://github.com/Shopify/shopify/commit/58a2b43340394251e003bab57b5fad8ab4c8dfa8#diff-2873e04fea7dc6a1c90e62e2d00f99d8R32

WIth something like

```ruby
class S3BucketIO
  def <<(data)
    #with something to hold on to the < 5 megs of data here
    @streamable.add_part(data)
  end

  def close
    @streamable.complete(:remote_parts)
  end

  def delete
    @streamable.abort
  end
end

class PublicS3Bucket
...
  def bucket_io(key)
      object = Shopify::Config.s3_bucket.objects[shop_key(key)]
      S3Bucket.new(object.multipart_upload)
    end
  end
...
end
```

- [ ] - add open method on asset `asset = cloud[key]; asset.open {|io|  ... }`
So in s3 if i abort which i need to do if something craps out it essentially deletes the partial upload. I'm not sure that abort makes sense in the context of files, this is why i put both. I'll just have abort, and treat it as delete in the file context.