engine.Installer: a standard interface for "installable" services

Installer is a standard interface for objects which can "install"
themselves an engine by registering handlers.

This can be used as an entrypoint for external plugins etc.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
Merge pull request #5345 from shykes/engine-installer

engine.Installer: a standard interface for "installable" services
Engine.Env.Append: append an Env to another.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
events: fix bug in 'events' timeout

This bug can be reproduced on older versions of Go - it has been tested
on 1.1.1.

Even though we don't support building Docker on that version of Go, I
will sleep better at night knowing that our synchronization and timeout
code is robust enough to work on a version of Go 6 months old.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
Separate the events subsystem

This separates the events subsystem from the deprecated Server object,
and moves it to its own package, which is cleanly installed into
the engine as a builtin.

The events subsystem exposes the following commands on the engine:

* ```events [FROM]``` listens for all matching events and streams them
to stdout

* ```logevent``` publishes a new event to all listeners (events are not
persisted). Events are duplicated across all active listeners.

* ```events_info``` returns information about the events subsystem.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)