Add server run() method that takes care of handling SIGTERM and exiting
cleanly so that child workers get terminated as well.
Use unprivlidged port to make testing easier.

Use new server run() method.

Refactor example class to make things simpler.
Use new server run() method.