Cleanup api server creation

Current implementation is hard to reason about because of trying to mix
unix/tcp server implementations, even though they are quite different.
This cleans that up.

Also makes it possible to create and manage a new API server easily,
e.g. for adding an introspection socket to a container.

Built in such a way as to allow a non-HTTP server to work as well, such
as libchan.
So we can wrap it and adhere to the `HttpServer` interface, which allows us to call Serve(), and Close() (which golang's http.Server doesn't do).