Add harpoon-supervisor

`harpoon-supervisor` implements the container supervision design doc (with a few changes, see the [changelog][]).

This PR is structured to ensure the existing agent continues to function. A separate PR will update the agent to use `harpoon-supervisor` instead of `harpoon-container`, and remove the `harpoon-container` subtree.

The details of `container_linux.go` are extracted from `harpoon-container/container.go`, as is `init_linux.go`. The remaining code is mostly new.

Most logic is covered by cross-platform tests; the remainder (`container_linux.go`) was manually vetted on a linux machine.

/cc @peterbourgon @jmyounker 

[changelog]: https://github.com/soundcloud/harpoon/blob/df72745a76441a054b6089e848b9066b24336e59/doc/design/container-supervision.md#changelog
Is `Exited` simply a confusing method name? I can't think of a better one, personally; otherwise I think the documented contract of Exited[¹] should be sufficient.

[¹]: https://github.com/soundcloud/harpoon/pull/45/files#diff-3aa8cef5c2868eec12a351b4cd21bdccR14