job.JobPayload is dead; long live unit.Unit

Previously, JobPayload was ostensibly an abstraction to allow Jobs to
support 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.

Finally, this change moves to storing all Units in the Registry by their
content rather than their name. Specifically it uses sha1 hashes of the
Unit's contents.

Basic backwards compatibility is supported for Jobs created with earlier
versions of fleet.
chore(sign): remove unused parseString function
fix(registry): ensure unit can be properly marshaled
fix(registry): add hash contents check for units
refactor(registry): Remove unused legacy payload methods
fix(tests): add tests for unit marshaling and payload unmarshaling
Merge pull request #325 from jonboulle/payload-hashing

feat(registry): decouple payload blob and store by hash
chore(tests): git ignore coverage output
Merge pull request #383 from jonboulle/coverage

chore(tests): git ignore coverage output
fix(offer): Fix a bad comment
refactor(config): Drop config opt boot_id
refactor(machine): Rename BootID to MachineID
refactor(job): centralize machine-req check into Job.RequiredTarget
refactor(job): Drop Boot from X-ConditionMachineBootID
refactor(job): Drop default peer functionality
fix(conflict): Check conflicts when no requirements defined
Merge pull request #379 from bcwaldon/drop-default-peers

Drop default peer behavior
doc(scheduling): Add note about machine-id location
refactor(offer): Rename MachineBootIds to MachineIDs
refactor(bid): Rename MachineBootId to MachineID