refactor(engine): Breaking apart code in engine pkg for readability
feat(engine): Add global event consumer

This new event consumer listens for new jobs or machines and ensures
two things:
1) new cluster-level jobs are scheduled to all machines in the cluster
2) new machines receive each of the cluster-level jobs when they boot

This code needs a lot of work, but hey, it's functional.
refactor(engine): Break apart entrypoints to engine pkg
refactor(engine): Rename watcher.go -> listener.go
refactor(engine): Rename EventConsumer -> EventListener
fix(engine): Track new machines in listener
refactor(*): hacking together an event-based model
refactor(Dispatcher): Move static func map out of loop
refactor(Agent): Move static func map out of loop
bump(github.com/coreos/go-etcd/etcd): 383cae1d8765b2028bcc7b7724f3fcefadb55484
fix(registry): use new go-etcd API

just make everything recursive for now.
Merge pull request #1 from philips/schedule-all

Fixup to use etcd master
refactor(*): add JobWatch and track machine heartbeats

* JobRequest objects yield JobWatch objects
* A JobWatch object tracks a single JobPayload and a Count. A Count value of -1
  represents the need to run a Job with the contained JobPayload on every host. A
  value other than -1 represents the need to run a specific number of the contained
  JobPayload across the cluster.
* A user of corectl may pass a --count flag to set Count to something larger than 1
* EventMachineUpdated events are now emitted when an Agent heartbeats. This is
  used by the Dispatcher to track an up-to-date list of machines.
Merge pull request #28 from bcwaldon/schedule-all

Rough implementation of an event-based job control model