WIP: DistCopy and sync operations

- [ ] Implementing new S3Data data type
- [ ] Rewriting DistCopy with new data types
- [ ] Pull out temporary FilePaths to mundane
- [ ] Pull out S3Data to saws?
- [ ] re-test split algorithms
- [ ] test mr jobs on cluster
- [ ] clean up
- [ ] rebase
- [ ] update api-compatibility with correct sha
A couple of these `if (X) ResultT.fail else Result.unit`. You can use `ResultT.when(X, ...)` if you like.