dont close proxy's stdout/stderr prematurely

Fix #8428

When stdout/stderr is closed prematurely, the proxy's writes to stdout/stderr
(i.e. `log.Errorf/log.Printf`) will returns with EPIPE error, and go runtime
will terminate the proxy when stdout/stderr writes trigger 10 EPIPE errors.

This fixes stdout/stderr by continuing to drain their output if the proxy
successfully starts. Stdout/Stderr will be closed when `proxy.Wait` returns.

Docker-DCO-1.1-Signed-off-by: Daniel, Dao Quang Minh <dqminh89@gmail.com> (github: dqminh)
@LK4D4 i tested and think that `log.SetOutput` is the minimal code that fix this issue (i.e. it passes the cli test ). However i think `TruncateWriter` in addition to that is probably more solid as it guarantees that the pipes will always be flushed correctly.

Another (totally unrelated, but may be better) approach is to not hijack stdout/stderr of the child process as the mean to report process state, but instead passing an open file handler as `ExtraFiles` into the child processs as a control handler. The child process then write `0\n | 1\n-error messages` into it when approriate.

wdyt ?