dockerinit: exit code reporting

Add dockerinit RPC Wait() function that waits for the container app to
exit and returns its exit code to the docker daemon.

This is needed for using libvirt-lxc because libvirt doesn't provide the
exit code.  It will also help docker get rid of the Ghost state.
dockerinit: kill support
dockerinit: console FD passing

Move all the pty/pipe console handling into dockerinit.  Create a UNIX
socket whose sole purpose is to pass the console FDs to the docker
daemon.

This will allow us to get rid of the container Ghost state, since the
docker daemon can always reconnect to the container's console if needed.
It will also enable stdin/stdout/stderr separation when using
libvirt-lxc.
dockerinit: goodbye Ghost state

Now that we can always reconnect to dockerinit to connect to the console
and wait for the exit code, the Ghost state can go bye bye.
dockerinit: drop capabilities

Drop capabilities in dockerinit instead of with lxc utils, since
libvirt-lxc doesn't support it.

This is also needed for machine container mode.  Dockerinit needs
CAP_SYS_ADMIN to setup /dev/console correctly.
dockerinit: machine container support

Detect when the app is a "machine container" with its own init process.
In this case, since upstart and systemd require running as PID 1, the
original dockerinit will have to "fork" a child long-running dockerinit
before exec-ing the real init.
dockerinit: set hostname

Set the hostname in dockerinit instead of with lxc utils.  libvirt-lxc
doesn't have a way to do this, so do it in a common place.
dockerinit: set IP address

Set the IP address in dockerinit instead of lxc utils, to prepare for
using libvirt-lxc.
remove pid from container state

Don't store the pid since nobody is using it.
test: get rid of LXC-specific tests

Since we're moving to a container plugin infrastructure, these tests
don't currently work with the LXC plugin and they'll never work with the
libvirt plugin.
test: make TestEnv non lxc-specific
test: remove extra args in TestExitCode

The extra blank argument isn't needed and confuses libvirt.
lxc: create lxc container plugin

Create a container plugin infrastructure and move the lxc-specific code
to a plugin.
network: create dockernet plugin

Create a network plugin infrastructure and move the bridge creation code
to a new "dockernet" plugin.
network: add explicit iptables allows

Explicitly enable container networking for Fedora and other distros that
have a REJECT all rule at the end of their FORWARD table.
dockerinit: privileged device cgroup access

When using libvirt-lxc in privileged mode, enable cgroup device access
from dockerinit, since libvirt doesn't support it.
libvirt: create libvirt-lxc plugins

Create container and network plugins for libvirt-lxc.  If libvirtd is
running, use the libvirt plugins.  Otherwise use the dockernet and lxc
plugins.