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/.
What about the following. Note we can change the word `ExecContext` for something that clashes less and doesnt stutter.

```Go
type ExecContext struct {
  ConfigRoot string
  Config     config.Config
  Node       core.IpfsNode
  ...
}

func contextWithExecCtx(ctx context.Context, ec *ExecContext) context.Context {
  return context.WithValue(ctx, "IpfsExecutionContext", ec)
}

func ExecCtxInContext(ctx context.Context) (context.Context, error) {
  val := ctx.Value("IpfsExecutionContext")
  ec, ok := val.(*ExecContext)
  // error handling ...
  return ec, nil
}


// somewhere
execCtx := ExecContext{
  ConfigRoot: configRoot,
  Config:     config,
  Node:       nd,
}

// local function
ctx := contextWithExecCtx(ctx, &execCtx)
request.SetContext(ctx)

...

// and elsewhere
ctx := request.Context()
ec, err := ExecCtxInContext(ctx)
```