Create a service supervision abstraction

Create an abstraction that will easily allow crates to support running under a variety of service supervisors.  The intial target should be initd, upstart, runit and nohup.