WiP: Implement reboot watcher

This is just the first branch in a series that is meant to add safe reboot support via juju hooks.

The watcher will look for any reboot event hat happens for a given machine. If that machine is a container, then the watcher will look for reboot events on its own ID and the ID of all parents. For example, lets say we have a machine with ID:

1/lxc/22/kvm/0
1/lxc/21/kvm/2

A reboot event on 1, will trigger a reboot on: 1, 1/lxc/22, 1/lxc/22/kvm/0 and on 1/lxc/21/kvm/2. A reboot on 1/lxc/22, will trigger a reboot on 1/lxc/22 and 1/lxc/22/kvm/0. And finally, a reboot on 1/lxc/22/kvm/0 will only be visible to its own worker.

This is still a work in progress.
This TODO will turn up in GoDoc as a description of the method. Reformat as follows:
```
// TODO (gsamfira) yyyy-mm-dd
// Check if the current node should reboot or shutdown. If we are a container,
//  and our parent needs to reboot, this should return: ShouldShutdown.

// ShouldRebootOrShutdown ...
func (m *Machine) ShouldRebootOrShutdown() (params.RebootAction, error) {
```