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|  ... }`
Mostly because in shopify i want to be able to have people stub in a file bucket for local dev instead of hitting s3,  my thinking at the time was uniformity -- I have to be able to abort S3 bucket streams, i want to be able to do something similar to all of them -- but it does mean different things in different contexts. I still believe this should be here; i'd personally like to call it abort on everything, and in the file context it means delete (because this is what it really means in S3 land)...