refactor(job, target): Give JobState/Target a reference to a Machine

It is helpful for JobState to contain the machine on which
it is currently running, so we give it an instance of
Machine. Target creates JobState objects, to it needs a
reference to Machine, too.
refactor(registry): s/GetUnscheduledJobs/GetGlobalJobs/

The plan is to leave jobs at the global level, so they should not
be considered "unscheduled".
refactor(registry): Save entire JobState object on UpdateJob

* Now that JobState has a reference to a Machine, we must save the
  entire object rather than just the State field
* s/UpdateMachineJob/UpdateJob/ - the state of a Job is now stored
  in a global namespace so we can ensure a specific job is always
  running without having to know where the Target is.
fix(scheduler): Replace a println with log.Println
refactor(registry): Stop deleting globally-scheduled Jobs

The global schedule is the entrypoint for clients to ask the system
to run something. These entries cannot be deleted as the scheduler
will not be able to reschedule jobs that fail on any given Machine.
feat(registry): Add GetJobState method to Registry

The GetJobState method of Registry will produce a JobState object
corresponding to the provided Job object.
feat(scheduler): Attempt to reschedule only if a Job has no state

If an Agent has started to report state for a given Job, the scheduler
must not attempt to reschedule it to a new Machine.
fix(target): Encode hyphens as _2d in systemd unit path

This is a partial fix for the bigger problem detailed in issue #13.
refactor(target): Wrap job payload in systemd unit file

* Reduce the amount of information a client has to provide when creating
  a job to the command that should be run. This allows us to change how
  we use systemd internally and offloads the work of forming a valid
  unit file from the client onto coreinit.
* Create a custom systemd target on startup. The name of the target is now
  generated from Machine.BootId so multiple copies of coreinit can run on
  a single logical server.
refactor(machine): require caller of machine.New to provide bootId

In order for Machine.BootId to be overridden at the coreinit.go
entrypoint, that value must be pushed through the entire system.
feat(main): Allow client to pass in -bootid flag

The -bootid flag will override the system-level boot ID, which is necessary
for running multiple copies of coreinit on a single logical server.
refactor(registry): Replace GetAllMachines with GetActiveMachines

The set of active Machine objects is more useful than the set of all Machines,
as the one client of this method is attempting to make scheduling decisions
based on who can currently execute jobs.
fix(agent): Always attempt to start a job if it isn't found locally

In the event that a job is scheduled for a machine but it is clearly
not found locally, it makes sense to attempt to start it no matter what.
refactor(target): Create GetSystemdTargetName helper method
Merge pull request #9 from bcwaldon/global-schedule

Use global namespace as source of truth for globally-scheduled jobs