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`
In all likelihood, users will only discover the panic at runtime, after they've been bit. 

It's a good practice to design so that misuse is detected at compile time, making runtime errors rare and making the library _very_ difficult to misuse. Using the compiler as a tool to guide users (programmers) is one of the best perks of compiled languages like Go. While tricky domain constraints sometimes force us to make these sorts of concessions,  it's better to find ways to avoid having to make them at all.