agent: add UnitStatePublisher.Purge
Merge pull request #787 from bcwaldon/purge-USP

agent: add UnitStatePublisher.Purge
agent: simplify desired state construction
agent: move task-related code to task.go
agent: serialize tasks through taskManager
agent: model dependent tasks using taskChains
Merge pull request #755 from bcwaldon/serialize-tasks

Serialize Agent tasks
agent: add global unit support to reconciler
agent: remove unnecessary TargetMachineID
engine: do not consider global units for scheduling
fleetctl: update to deal with global units

All fleetctl operations on global units are non-blocking. Updated
command descriptions to reflect this.

suToGlobal is shared across commands and so now moved to fleetctl.go

setTargetStateOfUnits should only care about DesiredState, not
CurrentState, of units it is attempting to modify.

Also standardises behaviour and error message reporting across commands