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
I don't think advising the test runner to use a timeout is the way to handle things.  It should be pretty easy to make a test fixture that expires these calls.  Something like...

func RunHandler(t *testing.T, f func()) <-chan struct{} {
    done := make(chan struct{});   
    go func() { f(); close(done)}()
    go func() {
      select {
      case <- done:
      case <- time.After(time.Second):
         t.Fatal("test method did not complete within time window.")
      }
   }()
   return done
}

done := RunHandler(t, func() { h.Run() })