Multipart File Transfer

This PR is ready for CR.

Overview of changes:

* Added a `commands.File` interface that implements `io.Reader` (which also has a filename and can be read in parts)
* Changed from accessing file argument values in `Request#Arguments()` to a separate `Request#Files()`
* Open files recursively on the client (and make them into `commands.File`s)
* Transfer files as multipart in `commands/http`
TBH I think File is the clearest name for it. For the implementor of a command, when you want to access the files uploaded by the user, you use `req.Files()` (even if some of the files are technically directories).

>also, do directories have an io.ReadCloser too?

They will error if you try to call `Read()`/`Close()`.

>And what does NextFile do?

It gets the next file from the directory (has to be this kind of API so we can support serial file transports like multipart).