ref(scheduler): introduce deis/publisher

In Deis's scheduler abstraction, we run a "sidecar" systemd unit which
publishes the running host and port of the application to etcd for
service discovery.

The issues with this sidecar container are as follows:

- it must live on the same host as the container
- it must wait for the container to come up before publishing
- it relies on using the docker client directly

The last point is crucial. This means that we are effectively
monitoring the docker client for container uptime, which is not the
same as monitoring the container directly.

This has been refactored into a micro-service image called
deis/publisher. Publisher listens directly to a docker socket
bind-mounted into the container and listens to the docker events API
for running containers. Running containers that follow the same format
as our current naming scheme (e.g. hardy-woodsman_v2.web.1) are
published to etcd for service discovery. This allows us to remove the
hard dependency on running a sidecar container to publish the app
container to etcd. Instead, one container per host publishes all
apps running on that host.

things to do:

- [x] add documentation
- [x] justify the change in the commit message
- [x] add migration notes
- [ ] add automated image builds to http://ci.deis.io
- [x] fix temporary reference to `bacongobbler/publisher`
- [x] ~~tests, tests, more tests~~ (deferring, etcd has no mock tests...)
- [x] remove etcd key on container stop events
- [x] only publish web and cmd processes
- [x] add dependency on `etcd.service`

replaces #1562
closes #1422
closes #1534
closes #1539 
closes #1529 
closes #1281 
I'm not sure how `container.Ports` are sorted, but if it's not by integer we might want to sort the ports before we iterate.  That will ensure that `80` is exposed before `8080`, for example.