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