Refactoring Commands

Now that we have the `commands` package set up, it's time to move everything over to it. This PR is currently not ready for merge, just setting it up for CR.

The basic scope of this PR is as follows:
* Set up transports based on `commands` package (HTTP RPC server/client, CLI command handling)
* Refactor existing commands for the new API (won't be a 1:1 mapping, commands will change)
* Make changes to `commands` package when necessary
> it's impossible for

famous last words. software changes all the time. cant know how we will mess with things and having to remember invariants like this is dangerous.

Go is right. It's truly an error to type cast without handling potential errors. just handle the error:

```Go
encStr, ok := enc.(string)
if !ok { 
  log.Error("invariant violated: enc not a string")
  return with an error (500). // but at least we didnt crash the entire server
}
mime := mimeTypes[encStr]
```

please remember that software is _extremely_ error prone. the last few months have only [painfully](http://en.wikipedia.org/wiki/Heartbleed) [reminded](http://en.wikipedia.org/wiki/Shellshock_(software_bug)) us to be very, very careful.