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
`req.Context().Config.Addresses.API` this is way too sketchy. this reaches through tons of abstractions that this thing probably shouldn't know anything about.

This `Send` function should be part of a Client object, which gets constructed with the right options. so:

```Go
// Client is the commands HTTP Client interface.
type Client interface {
  Send(req cmds.Request) (cmds.Response, error)
}

type client struct {
  server ma.Multiaddr
}

func NewClient(apiAddress ma.Multiaddr) Client {
  return &client{address: apiAddress}
}

func (c *client) Send(req cmds.Request) (cmds.Response, error) {
	// use c.address
        ...
```