refactor(makefile): cleanup and add release, dev-release target
refactor(tests): cleanup tests, move common logic into test-setup.sh
chore(tests): add log_phase helper

chore(tests): use log_phase in test-setup

fix(tests): log when testing docs

fix(tests): switch test-smoke to log_phase
fix(tests): install required go dependencies
fix(makefile): replace user-data inline
fix(tests): add DEISCTL_UNITS to test-setup
fix(docs): clean up sources and treat warnings as errors

Many deficiencies in the docs were being skipped over because
`sphinx-build` is lenient. Adding the `-W` flag treats issues
such as "missing reference" and "class not found" as errors.
fix(tests): add correct key to ssh-agent
fix(deisctl): create unit download URL properly after move to subdir
fix(makefile): use portable sed for make discovery-url
Merge pull request #1952 from mboersma/1942-fix-doc-testing

fix(docs): clean up sources and treat warnings as errors
Merge pull request #1951 from gabrtv/make-release

Cleanup Makefile and test suites in preparation for new CD pipeline
Merge pull request #1961 from mboersma/hotfix-unit-urls

fix(deisctl): create unit download URL properly after move to subdir
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.

MIGRATING: to migrate to this change from existing hosts, you can run
the following:

    ><> # rsync publisher/systemd/deis-publisher.service to every node
    ><> for i in deis-1.example.com deis-2.example.com; do ssh core@$i -c "sudo systemctl enable /home/core/deis-publisher.service && sudo systemctl start /home/core/deis-publisher"

Then, you'll want to remove each announce sidecar attached to the applications:

    ><> fleetctl destroy <appname>-_<version>.<proctype>.<conatiner ID>-announce
feat(deisctl): add deis/publisher

With this change comes the introduction of the ability to add global
units to the project. Before, we would always prepend "@1" to the units
because we always assumed they'd be scalable. This is not the case for
global units, so I reverted that behaviour.