WiP: Add uniter changes to support reboot

This PR adds the uniter changes needed to support reboot.

Depends on:

https://github.com/juju/juju/pull/707
https://github.com/juju/juju/pull/728
https://github.com/juju/juju/pull/744
https://github.com/juju/juju/pull/782
https://github.com/juju/juju/pull/833

This feels like it's asking for trouble. What happens when we move the uniter tasks into the machine agents? (ErrTerminateAgent is *also* wrong, fwiw, and I would be most happy if you fixed both of these -- both worker.Err* values are just layer-breaking here, and we should be using ones that have local meaning and translating them to agent-level errors outside this worker)