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`
This section is a bit harder to follow than the following. Also note possible bug, and change to for loop.

```Go
// if the buffer has something in it, read from it
if mfr.buf.Len() > 0 {
  return mfr.buf.Read(buf)
}

// if no current file, EOF? (it really should've been taken care of by the 
// previous `if mfr.currentFile == nil { ... }` section
if mfr.currentFile == nil {
  return 0, io.EOF // or what?
}

written, err = mfr.currentFile.Read(buf)
if err == io.EOF {
  // describe WHY we're recursing.
  // (also recursing like this is scary. 
  // I think designing this function with a for loop is much better)
  return mfr.Read(buf)
  // Also, is there a bug here? what if written > 0 wont this overwrite?
}
return written, err
```