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`
> 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.

@maybebtc completely agreed with the above.

But this panic is actually ok. It's meant to be called on package init. Remember that this code is called _statically_. So it gives the programmer immediate feedaback. the go `flag` package behaves the same way (worse actually).

Lots of stdlib go code panics when its standard-use invariants are violated. Panics signal "you're doing this wrong and should change it immediately", not "an error happened"