help contributors be more productive

certainly saved me time after I found this in hack/make.sh :)

Docker-DCO-1.1-Signed-off-by: Tim Ruffles <oi@truffles.me.uk> (github: github_handle)
Merge pull request #4335 from tianon/what-the-etc-group

Convert api/server.go to also use the handy user package
Merge pull request #4323 from timruffles/patch-2

help contributors be more productive
beam: a better communication protocol for distributed systems

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

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

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

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: synchronize Pipe.Send and Pipe.Close with a mutex

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com>
(github: shykes)
beam: Copy and Splice utility functions

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: WrapIO() wraps familiar Golang io interfaces inside a Stream object

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: Func wraps a handler function into a Stream

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

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: fix Func to fully implement the Stream interface

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: DevNull: a convenience stream which discards all messages sent to it

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: NewReader and NewWriter: wrap any Stream in an io.Reader or io.Writer

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: new example: 'minirpc', a minimal in-memory rpc engine

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: NewFile wraps an os.File object in a Stream.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: Splice closes both streams upon completion

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
beam: more tests for Splice and DevNull

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

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

* Func.Send spawns a new goroutine to handle each message
* As a result, Func.Send never fails
* After a new stream is received and processed, it is closed. This can be used for synchronization
* Func.Receive returns io.EOF instead of failing
* A few tests to enforce the above