Update outputter threads to wait till threads exit, to fix occasional problems.
Update outputter threads to wait till threads exit, to fix occasional problems.

Was still getting intermittent cases of e.g. run() returning prematurely, while
the outputter thread was still running and pulling in data from the network. I'm not positive it's 100% fixed but it's behaving a lot better, and almost as importantly, I think conceptually this code makes a lot more sense.

Also includes extra comments in the same area.

raimon49/fabric,kmonsoor/fabric,likesxuqiang/fabric,getsentry/fabric,rbramwell/fabric,pashinin/fabric,askulkarni2/fabric,felix-d/fabric,kxxoling/fabric,MjAbuz/fabric,hrubi/fabric,simon-engledew/fabric,TarasRudnyk/fabric,ploxiln/fabric,pgroudas/fabric,ericholscher/fabric,mathiasertl/fabric,cgvarela/fabric,itoed/fabric,fernandezcuesta/fabric,amaniak/fabric,bitprophet/fabric,SamuelMarks/fabric,bitmonk/fabric,elijah513/fabric,haridsv/fabric,sdelements/fabric,akaariai/fabric,qinrong/fabric,rodrigc/fabric,tekapo/fabric,rane-hs/fabric-py3,xLegoz/fabric,bspink/fabric,tolbkni/fabric,opavader/fabric,cmattoon/fabric,jaraco/fabric,StackStorm/fabric