feat(fleetctl): add version check to fleetctl

This adds a basic version check/gate to fleetctl wherein it will print a
scary warning to the user if the version of fleetctl appears to be older
than the version of fleet running in the cluster. The version of fleet
in the cluster is inferred from the latest version found in all
machinestates registered in the registry.
Merge pull request #428 from jonboulle/428

Implement version gate in fleetctl
Merge pull request #469 from bcwaldon/agent-logic

Refactor Agent/EventHandler relationship
refactor(agent): Drop single-use method newFakeMachine
refactor(agent): Move fakeMachine to machine pkg
test(unit): Add FakeUnitManager
refactor(registry): Move TestRegistry from fleetctl to registry pkg
refactor(TestRegistry): panic in unimpl methods; use ptr receivers
refactor(registry): s/TestRegistry/FakeRegistry/
refactor(FakeRegistry): Use map to store Jobs
test(FakeRegistry): Add testing of create/list/destroy jobs
refactor(FakeRegistry): Use methods to load fixtures
feat(FakeRegistry): Implement JobBid-related methods
feat(FakeRegistry): implement SaveUnitState
feat(FakeRegistry): implement Set/GetJobTargetState
refactor(FakeRegistry): Use embedded iface
fix(FakeRegistry): Protect access with mutex
refactor(event): synchronous EventBus

Simplify the EventBus by making its dispatching synchronous. This
makes testing deterministic.
test(agent): simple offer/bid integration test