fix(scheduling): Correct the ConditionMachineOf behavior (mostly)

* Stop creating job offers in the agents, just clear a job's target
* Add EventJobUnscheduled, facilitating communication of need to reschedule
* Only clear a job's target if it the target is known
feat(payload): support timer units

* Allow users to submit systemd timer units
* Add a default peer to systemd timer units similar to the
  handling of socket units
feat(fleetctl): assume .service if not provided, like systemctl.

It also turns slashes into dashes, following systemd's criteria:
http://cgit.freedesktop.org/systemd/systemd/tree/src/shared/unit-name.c#n479
Merge pull request #305 from bcwaldon/timer-units

Support timer units
Merge pull request #343 from bcwaldon/ConditionMachineOf

fix(scheduling): Correct the ConditionMachineOf behavior (mostly)
fix(fleetctl): Make fleetctl stop/unload more helpful

Like load and start, unload and stop should block on success.
Additionally, unload should attempt to stop a job before
fully unloading it.
fix(functional): parse new list-units output
fix(functional): fix TestScheduleConflicts
fix(agent): start job if target state is launched
fix(test): separate submit from start in signed-request test
Merge pull request #349 from bcwaldon/fleetctl-stop-unload

Make fleetctl stop/unload more helpful
Merge pull request #345 from bcwaldon/fix-functional-tests

Fix functional tests
doc(agent): Explain why we manually publish state
Merge pull request #351 from bcwaldon/manual-refresh-state

Explain why we manually publish state
fix(purge): Simplify graceful agent shutdown
Merge pull request #332 from bcwaldon/fix-agent-shutdown

fix(purge): Simplify graceful agent shutdown
Merge pull request #300 from calavera/assume_service

feat(fleetctl): assume .service if not provided, like systemctl.
fix(pkg): Fail gracefully when unable to detect homedir

ParseFilepath may fail to get the current-user home directory, and return
path like '~/xxx'. Point to current directory when failing, and log it.
job.JobPayload is dead; long live unit.Unit

Previously, JobPayload was ostensibly an abstraction to allow Jobs to
suppoort different kind of backends. However, it was never truly
abstract enough to support anything other than Units. This resulted in a
lot of glue code and inconsistencies in external and internal
interfaces.

This change completely rips out JobPayload and replaces most uses of it
with a slightly more robust Unit (essentially the two are collapsed).
There are also certain cases (e.g. signature verification) where it now
makes more sense for the object to be the Job rather than the Unit.