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`
If it is a file, then it isn't a directory. while i agree that the distinction in unix is ultimately a bad one, this naming will confuse clients. I note that making two sets of objects is probably bad, so perhaps `FSPath`?

also, do directories have an `io.ReadCloser` too? And what does `NextFile` do?

Interfaces are a _great_ place to document design extensively. Document here (both the type and the functions) and we'll all understand your code better. Look at the Go source for inspiration.