Pass net.Listener into apiserver.NewServer

The dummy provider will soon be changed to
create a net.Listener with an ephemeral port,
and then later use this Listener in its
embedded apiserver.Server.

In this PR, we change apiserver.NewServer
to accept a Listener, as opposed to creating
one internally. We record the ephemeral port
as api-port in the dummy provider's environment
config; this will be used in a future change
to use api-port as the basis of computing the
API server addresses, as we do in normal operation.

This change also opens the door to testing without
a TCP-based listener (e.g. using a mock listener
than returns in-memory net.Conns created with
net.Pipe).