Better error handling in server.start()

Transport drivers can raise transport driver specific exceptions
in listen(). Catch such exceptions and wrap them in a ServerListenError
which callers to start() can explicitly handle.

Change-Id: I0f6730f091934eef84e7f9e560bc71987bf090dc
More gracefully handle "no listeners" in fake driver

Change-Id: I21fc3d042d0600599e3bdc519e80fad6b9a4a977
Add some RPC server tests

These actually test the blocking executor and fake driver too.

Change-Id: I41250c952929d4ba4ca036651876aa53436dd1fe