Commands Refactor Part 2

We split #196 in two parts. this is the second. (#262 is the first). This builds on all the changes to commands/.
on the latter, i'd prefer:

```Go
node := CreateTheNode()
ctx := contextWithNode(context.Background(), node)
request.SetContext(ctx)
```

What i dont like about `ctx.WithValue` is that it's not clear _at all_ what these contexts contain. It's a hack to keep a simple design + get around many issues. a bit sketchy.