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
It just avoids some stuttering in the declaration. You can still address members explicitly as e.g. `controller.Listener.Close()`, `controller.Supervisor.Exited()`.