Move userland proxies out of daemon process

This PR moves the userland proxies for TCP and UDP traffic out of the
main docker daemon's process ( from goroutines per proxy ) to be a
separate reexec of the docker binary.  This reduces the cpu and memory
needed by the daemon and if the proxy processes crash for some reason
the daemon is unaffected.  This also displays in the standard process
tree so that a user can clearly see if there is a userland proxy that is
bound to a certain ip and port.

```bash
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                                          NAMES
545bd20cda42        busybox:buildroot-2014.02   "sh"                3 seconds ago       Up 2 seconds        0.0.0.0:49153->80/tcp, 0.0.0.0:49154->90/tcp   cocky_galileo
root@937a18ea9853:/go/src/github.com/docker/docker# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  18156  3380 ?        Ss   23:13   0:00 bash
root       596  1.9  0.8 481376 18204 ?        Sl   23:14   0:01 docker -d -s vfs
root       662  1.0  0.5 188304 10688 ?        Sl   23:15   0:00 docker-userland-proxy -proto tcp -host-ip 0.0.0.0 -host-port 49153 -container-ip 10.0.0.2 -container-port 80
root       670  0.7  0.5 196500 10668 ?        Sl   23:15   0:00 docker-userland-proxy -proto tcp -host-ip 0.0.0.0 -host-port 49154 -container-ip 10.0.0.2 -container-port 90
root       673  1.5  0.0   3168   176 pts/0    Ss+  23:15   0:00 sh
root       696  0.0  0.1  15568  2060 ?        R+   23:15   0:00 ps aux
```

This also helps us to cleanly cleanup the proxy processes by stopping
these commands instead of trying to terminate a goroutine.

Signed-off-by: Michael Crosby <michael@docker.com>
This is great. Thanks Mike. +1 on docker- also

On Tuesday, August 12, 2014, Alexandr Morozov <notifications@github.com>
wrote:

> In daemon/networkdriver/portmapper/proxy.go:
>
> > +			Stdout: os.Stdout,
> > +			Stderr: os.Stderr,
> > +			SysProcAttr: &syscall.SysProcAttr{
> > +				Pdeathsig: syscall.SIGTERM, // send a sigterm to the proxy if the daemon process dies
> > +			},
> > +		},
> > +	}
> > +}
> > +
> > +func (p *proxyCommand) Start() error {
> > +	return p.cmd.Start()
> > +}
> > +
> > +func (p *proxyCommand) Stop() error {
> > +	err := p.cmd.Process.Signal(os.Interrupt)
> > +	p.cmd.Wait()
>
> Is it possible that proxy won't die from os.Interrupt?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/docker/docker/pull/7548/files#r16156332>.
>