feat(0.2): Update to etcd 0.2
Merge pull request #6 from bcwaldon/master

fix(agent): be more intelligent about starting services
refactor(*): Major refactoring

* New job package offers abstraction of Job, JobState, JobPayload
* Break out all systemd access from agent into a new target package
Merge pull request #7 from bcwaldon/0.2

Update etcd dependency to 0.2; Major refactoring
refactor(registry): Rename GetJobs, UpdateJob -> GetMachineJobs, UpdateMachineJob
refactor(registry): Add GetUnscheduledJobs method to Registry

This new method and associated refactoring are in preparation
for a global scheduler.
chore(fmt): run go fmt
refactor(registry): Add GetAllMachines method to Registry
fix(machine): Allow BootId to be provided to Machine.New

The previous logic would always overwrite a Machine BootId with the
local value, even if it was provided to Machine.New. Now a client of
Machine.New can provide a specific BootId and it will be persisted.
feat(registry): Add AcquireLock method to Registry

The AcquireLock method allows a caller to attempt to acquire a lock
by providing a lock name, a context and a TTL. This will be reimplemented
once etcd provides this functionality natively.
feat(registry): Add ScheduleJob method to Registry

This method allows the caller to provide an unscheduled Job and have
it scheduled to a specific Machine.
feat(scheduler): Add a simple Scheduler

This scheduler will poll the Registry for unscheduled Jobs, attempt to
acquire a lock on one of those Jobs, then schedule it to a random
Machine.
feat(scheduler): Run a Scheduler in the coreinit binary
Merge pull request #8 from bcwaldon/global-schedule

Alpha Scheduler
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.