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`
No, `EnableRecursive` is just one of the JS-style argument modifiers, it doesn't make sense to need to check an error. The panic is just to make sure its use isn't misunderstood.

I described a better way to handle this here: https://github.com/jbenet/go-ipfs/pull/357#diff-4c39f2a5a937543dea7d9724f3d6f6b2R40