WIP s3 interface is working

I'm not happy with this. I'm making some design decisions that I think
should be thought through some more. I'm committing this as a checkpoint
to refactor and simplify.