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`
Wouldn't it be preferable to return (Argument, error) rather than panic? 

Panics leave indeterminate state. Why not leave this up to our standard error handling mechanisms? If it's for the discoverability of programmer errors, we should probably add tests, no?