registry: add EngineVersion and UpdateEngineVersion
etcd: implement Set.PreviousValue
etcd: add Node.TTL and Node.TTLDuration()
registry: remove "role" from lease mechanism
registry: role.go -> lease.go
registry: move AcquireLease to new interface

Also move remaining Lease-related docstrings to interface.
registry: break out leasePath helper
registry: expand Lease and LeaseRegistry interfaces

- expose Lease owner with MachineID()
- expose Lease creation time with Index() (just the etcd ModifiedIndex)
- expose Lease length with TimeRemaining()
- track version number as part of Lease (use Version() to access id)
- add GetLease and StealLease to LeaseRegistry interface
engine: support graceful upgrades

- ensure cluster engine version at or greater than local
- refrain from acquiring lease if version less than cluster
- steal lease from lesser-versioned engines, waiting for
  the old lease to expire before doing any work