* ignore signals in subprocesses
The sub-processes started by ProcessPoolExecutor will also receive SIGINT when the main process receives it. This results in the signal handler running in every subprocess and fail to create the task to close all connections. They print this error to stdout
* cleanup UPnP shutdown
make an explicit call to UPnP shutdown() (which joins the thread). Improve logging a bit
* wait for initialize_weight_proof task when shutting down
* release upnp ports on shutdown
* lint
* explicitly removes port mapping first to handle possible unclean shutdowns
* catches exception
* moves upnp setup to thread
* lint
* moves upnp logic to a message queue on a worker thread
* lint