S3 storage backend. closes #6