In add_callback, hold the lock while writing to the waker pipe.
In add_callback, hold the lock while writing to the waker pipe.

This protects against a shutdown race condition seen occasionally in
the ThreadedResolver unittests.  This slightly increases contention
on the callback lock in multi-threaded scenarios, but the cost is
limited by the fact that we only write to the pipe once per IOLoop
iteration.

Closes #875.

ZhuPeng/tornado,ifduyue/tornado,coderhaoxin/tornado,jampp/tornado,wxhzk/tornado-1,akalipetis/tornado,bywbilly/tornado,hzruandd/tornado,0x73/tornado,djt5019/tornado,noxiouz/tornado,coderhaoxin/tornado,jonashagstedt/tornado,ymero/tornado,Geoion/tornado,importcjj/tornado,insflow/tornado,cyrilMargaria/tornado,leekchan/tornado_test,304471720/tornado,kevinge314gh/tornado,Drooids/tornado,pombredanne/tornado,fengshao0907/tornado,lsanotes/tornado,wsyzxcn/tornado,pombredanne/tornado,coderhaoxin/tornado,tianyk/tornado-research,kippandrew/tornado,chenxiaba/tornado,noxiouz/tornado,sunjeammy/tornado,cyrusin/tornado,sxfmol/tornado,wsyzxcn/tornado,zhuochenKIDD/tornado,SuminAndrew/tornado,fengshao0907/tornado,elelianghh/tornado,pombredanne/tornado,Geoion/tornado,Polyconseil/tornado,mehmetkose/tornado,Lancher/tornado,kangbiao/tornado,wechasing/tornado,yuyangit/tornado,kevinge314gh/tornado,kevinge314gh/tornado,gitchs/tornado,djt5019/tornado,bufferx/tornado,z-fork/tornado,wujuguang/tornado,yuyangit/tornado,takeshineshiro/tornado,eXcomm/tornado,djt5019/tornado,Snamint/tornado,icejoywoo/tornado,allenl203/tornado,kaushik94/tornado,arthurdarcet/tornado,Aaron1992/tornado,0x73/tornado,legnaleurc/tornado,304471720/tornado,fengsp/tornado,xinyu7/tornado,kippandrew/tornado,MjAbuz/tornado,icejoywoo/tornado,sxfmol/tornado,nephics/tornado,nephics/tornado,hzruandd/tornado,shaohung001/tornado,kangbiao/tornado,ubear/tornado,obsh/tornado,yuyangit/tornado,akalipetis/tornado,codecov/tornado,jonashagstedt/tornado,anandology/tornado,tornadoweb/tornado,coderhaoxin/tornado,elelianghh/tornado,jsjohnst/tornado,bdarnell/tornado,andyaguiar/tornado,drewmiller/tornado,drewmiller/tornado,Windsooon/tornado,yuezhonghua/tornado,jarrahwu/tornado,AlphaStaxLLC/tornado,nephics/tornado,nbargnesi/tornado,zguangyu/tornado,Callwoola/tornado,ListFranz/tornado,noxiouz/tornado,ColorFuzzy/tornado,dsseter/tornado,pombredanne/tornado,legnaleurc/tornado,ZhuPeng/tornado,whip112/tornado,ms7s/tornado,jarrahwu/tornado,hzruandd/tornado,304471720/tornado,zguangyu/tornado,arthurdarcet/tornado,xinyu7/tornado,Callwoola/tornado,0x73/tornado,kangbiao/tornado,LTD-Beget/tornado,obsh/tornado,dsseter/tornado,codecov/tornado,chenxiaba/tornado,Batterfii/tornado,mlyundin/tornado,Windsooon/tornado,304471720/tornado,shaohung001/tornado,kippandrew/tornado,SuminAndrew/tornado,tornadoweb/tornado,hhru/tornado,akalipetis/tornado,wujuguang/tornado,mlyundin/tornado,bywbilly/tornado,LTD-Beget/tornado,LTD-Beget/tornado,frtmelody/tornado,gitchs/tornado,takeshineshiro/tornado,SuminAndrew/tornado,nephics/tornado,jehiah/tornado,VShangxiao/tornado,shashankbassi92/tornado,Lancher/tornado,NoyaInRain/tornado,felixonmars/tornado,futurechallenger/tornado,wsyzxcn/tornado,ColorFuzzy/tornado,InverseLina/tornado,jehiah/tornado,jehiah/tornado,arthurdarcet/tornado,gitchs/tornado,elelianghh/tornado,frtmelody/tornado,Windsooon/tornado,Acidburn0zzz/tornado,insflow/tornado,kaushik94/tornado,zguangyu/tornado,sevenguin/tornado,eXcomm/tornado,AlphaStaxLLC/tornado,NoyaInRain/tornado,leekchan/tornado_test,ZhuPeng/tornado,zguangyu/tornado,codecov/tornado,bdarnell/tornado,Lancher/tornado,shashankbassi92/tornado,insflow/tornado,yangkf1985/tornado,LTD-Beget/tornado,ubear/tornado,leekchan/tornado_test,Acidburn0zzz/tornado,bywbilly/tornado,ZhuPeng/tornado,zhuochenKIDD/tornado,mehmetkose/tornado,whip112/tornado,Drooids/tornado,mehmetkose/tornado,cyrilMargaria/tornado,ymero/tornado,jsjohnst/tornado,lsanotes/tornado,jsjohnst/tornado,allenl203/tornado,kaushik94/tornado,Fydot/tornado,VShangxiao/tornado,futurechallenger/tornado,MjAbuz/tornado,fengsp/tornado,erichuang1994/tornado,ubear/tornado,yangkf1985/tornado,Polyconseil/tornado,importcjj/tornado,z-fork/tornado,sunjeammy/tornado,djt5019/tornado,yuezhonghua/tornado,Geoion/tornado,ajdavis/tornado,BencoLee/tornado,QuanZag/tornado,AlphaStaxLLC/tornado,hhru/tornado,legnaleurc/tornado,erichuang1994/tornado,QuanZag/tornado,ms7s/tornado,ovidiucp/tornado,wxhzk/tornado-1,ifduyue/tornado,elelianghh/tornado,anjan-srivastava/tornado,hhru/tornado,tornadoweb/tornado,Polyconseil/tornado,nephics/tornado,VShangxiao/tornado,mivade/tornado,Acidburn0zzz/tornado,zhuochenKIDD/tornado,eklitzke/tornado,Geoion/tornado,cyrusin/tornado,gwillem/tornado,felixonmars/tornado,xinyu7/tornado,fengshao0907/tornado,nordaux/tornado,shaohung001/tornado,dsseter/tornado,mr-ping/tornado,ListFranz/tornado,ydaniv/tornado,lujinda/tornado,wujuguang/tornado,andyaguiar/tornado,Lancher/tornado,Snamint/tornado,eklitzke/tornado,Batterfii/tornado,drewmiller/tornado,z-fork/tornado,allenl203/tornado,importcjj/tornado,ListFranz/tornado,zhuochenKIDD/tornado,xinyu7/tornado,jarrahwu/tornado,mivade/tornado,wxhzk/tornado-1,anjan-srivastava/tornado,tornadoweb/tornado,lilydjwg/tornado,mivade/tornado,arthurdarcet/tornado,MjAbuz/tornado,jehiah/tornado,Drooids/tornado,cyrilMargaria/tornado,akalipetis/tornado,Batterfii/tornado,VShangxiao/tornado,VShangxiao/tornado,kangbiao/tornado,InverseLina/tornado,chenxiaba/tornado,drewmiller/tornado,ovidiucp/tornado,importcjj/tornado,Polyconseil/tornado,Polyconseil/tornado,ymero/tornado,frtmelody/tornado,z-fork/tornado,eXcomm/tornado,felixonmars/tornado,jparise/tornado,LTD-Beget/tornado,Aaron1992/tornado,Snamint/tornado,arthurdarcet/tornado,fengshao0907/tornado,ms7s/tornado,chenxiaba/tornado,nbargnesi/tornado,johan--/tornado,icejoywoo/tornado,noxiouz/tornado,ms7s/tornado,lujinda/tornado,kaushik94/tornado,jampp/tornado,nordaux/tornado,hzruandd/tornado,jsjohnst/tornado,0xkag/tornado,frtmelody/tornado,z-fork/tornado,BencoLee/tornado,MjAbuz/tornado,sxfmol/tornado,importcjj/tornado,felixonmars/tornado,yuezhonghua/tornado,BencoLee/tornado,shashankbassi92/tornado,mivade/tornado,lujinda/tornado,ZhuPeng/tornado,gitchs/tornado,ovidiucp/tornado,liqueur/tornado,wujuguang/tornado,sevenguin/tornado,zguangyu/tornado,yangkf1985/tornado,Snamint/tornado,ColorFuzzy/tornado,Windsooon/tornado,ubear/tornado,nordaux/tornado,kangbiao/tornado,erichuang1994/tornado,chenxiaba/tornado,QuanZag/tornado,ColorFuzzy/tornado,icejoywoo/tornado,kevinge314gh/tornado,kevinge314gh/tornado,hzruandd/tornado,leekchan/tornado_test,whip112/tornado,gwillem/tornado,jarrahwu/tornado,NoyaInRain/tornado,djt5019/tornado,dongpinglai/my_tornado,nbargnesi/tornado,mr-ping/tornado,johan--/tornado,jsjohnst/tornado,mlyundin/tornado,andyaguiar/tornado,mr-ping/tornado,dsseter/tornado,sevenguin/tornado,zhuochenKIDD/tornado,whip112/tornado,obsh/tornado,0xkag/tornado,johan--/tornado,lujinda/tornado,shaohung001/tornado,codeb2cc/tornado,anjan-srivastava/tornado,pombredanne/tornado,gitchs/tornado,Geoion/tornado,Aaron1992/tornado,liqueur/tornado,anjan-srivastava/tornado,elijah513/tornado,yangkf1985/tornado,wxhzk/tornado-1,allenl203/tornado,InverseLina/tornado,shashankbassi92/tornado,fengshao0907/tornado,Callwoola/tornado,legnaleurc/tornado,bdarnell/tornado,Snamint/tornado,jonashagstedt/tornado,mehmetkose/tornado,cyrusin/tornado,insflow/tornado,icejoywoo/tornado,dongpinglai/my_tornado,nbargnesi/tornado,lsanotes/tornado,NoyaInRain/tornado,sevenguin/tornado,Fydot/tornado,anjan-srivastava/tornado,ymero/tornado,hhru/tornado,futurechallenger/tornado,djt5019/tornado,importcjj/tornado,anandology/tornado,cyrilMargaria/tornado,InverseLina/tornado,Fydot/tornado,johan--/tornado,akalipetis/tornado,mehmetkose/tornado,andyaguiar/tornado,gwillem/tornado,Batterfii/tornado,yuezhonghua/tornado,lujinda/tornado,andyaguiar/tornado,dongpinglai/my_tornado,coderhaoxin/tornado,eXcomm/tornado,lsanotes/tornado,noxiouz/tornado,drewmiller/tornado,obsh/tornado,kevinge314gh/tornado,zhuochenKIDD/tornado,sevenguin/tornado,xinyu7/tornado,yuyangit/tornado,elijah513/tornado,bdarnell/tornado,zguangyu/tornado,bywbilly/tornado,jarrahwu/tornado,ydaniv/tornado,gitchs/tornado,Acidburn0zzz/tornado,ajdavis/tornado,kippandrew/tornado,LTD-Beget/tornado,Batterfii/tornado,futurechallenger/tornado,ListFranz/tornado,jehiah/tornado,Aaron1992/tornado,ajdavis/tornado,dongpinglai/my_tornado,jparise/tornado,ajdavis/tornado,ColorFuzzy/tornado,sxfmol/tornado,dongpinglai/my_tornado,wxhzk/tornado-1,liqueur/tornado,Fydot/tornado,mlyundin/tornado,wsyzxcn/tornado,wsyzxcn/tornado,ifduyue/tornado,Drooids/tornado,tianyk/tornado-research,noxiouz/tornado,jonashagstedt/tornado,mlyundin/tornado,hzruandd/tornado,Aaron1992/tornado,eklitzke/tornado,lujinda/tornado,cyrilMargaria/tornado,arthurdarcet/tornado,anandology/tornado,Drooids/tornado,Acidburn0zzz/tornado,sunjeammy/tornado,akalipetis/tornado,gwillem/tornado,ms7s/tornado,0x73/tornado,nordaux/tornado,mr-ping/tornado,jarrahwu/tornado,lilydjwg/tornado,ListFranz/tornado,bufferx/tornado,codeb2cc/tornado,eklitzke/tornado,elijah513/tornado,gwillem/tornado,takeshineshiro/tornado,BencoLee/tornado,kippandrew/tornado,AlphaStaxLLC/tornado,codecov/tornado,wechasing/tornado,ColorFuzzy/tornado,0x73/tornado,obsh/tornado,codeb2cc/tornado,cyrilMargaria/tornado,lsanotes/tornado,wsyzxcn/tornado,tianyk/tornado-research,johan--/tornado,anandology/tornado,jparise/tornado,0xkag/tornado,icejoywoo/tornado,mr-ping/tornado,wsyzxcn/tornado,insflow/tornado,cyrusin/tornado,Callwoola/tornado,takeshineshiro/tornado,AlphaStaxLLC/tornado,legnaleurc/tornado,AlphaStaxLLC/tornado,liqueur/tornado,SuminAndrew/tornado,Acidburn0zzz/tornado,wujuguang/tornado,NoyaInRain/tornado,takeshineshiro/tornado,ifduyue/tornado,tianyk/tornado-research,ydaniv/tornado,ovidiucp/tornado,dsseter/tornado,insflow/tornado,z-fork/tornado,BencoLee/tornado,takeshineshiro/tornado,shaohung001/tornado,elelianghh/tornado,leekchan/tornado_test,Windsooon/tornado,tianyk/tornado-research,anandology/tornado,gwillem/tornado,wechasing/tornado,BencoLee/tornado,jampp/tornado,ZhuPeng/tornado,lilydjwg/tornado,kaushik94/tornado,QuanZag/tornado,bufferx/tornado,frtmelody/tornado,ms7s/tornado,sevenguin/tornado,fengsp/tornado,mehmetkose/tornado,ymero/tornado,shaohung001/tornado,felixonmars/tornado,jampp/tornado,VShangxiao/tornado,Fydot/tornado,ovidiucp/tornado,codeb2cc/tornado,erichuang1994/tornado,NoyaInRain/tornado,mlyundin/tornado,xinyu7/tornado,andyaguiar/tornado,nordaux/tornado,shashankbassi92/tornado,InverseLina/tornado,ydaniv/tornado,anjan-srivastava/tornado,nbargnesi/tornado,kippandrew/tornado,nbargnesi/tornado,ifduyue/tornado,yangkf1985/tornado,elijah513/tornado,futurechallenger/tornado,mivade/tornado,eXcomm/tornado,ajdavis/tornado,jsjohnst/tornado,wechasing/tornado,0xkag/tornado,codeb2cc/tornado,Callwoola/tornado,Polyconseil/tornado,anandology/tornado,bdarnell/tornado,fengsp/tornado,chenxiaba/tornado,wechasing/tornado,bufferx/tornado,jparise/tornado,futurechallenger/tornado,MjAbuz/tornado,bywbilly/tornado,sxfmol/tornado,ubear/tornado,Snamint/tornado,jampp/tornado,liqueur/tornado,wechasing/tornado,kangbiao/tornado,pombredanne/tornado,304471720/tornado,jonashagstedt/tornado,jampp/tornado,cyrusin/tornado,ubear/tornado,Geoion/tornado,allenl203/tornado,jparise/tornado,obsh/tornado,QuanZag/tornado,Drooids/tornado,ydaniv/tornado,SuminAndrew/tornado,coderhaoxin/tornado,ymero/tornado,fengsp/tornado,whip112/tornado,0xkag/tornado,bufferx/tornado,MjAbuz/tornado,wxhzk/tornado-1,Fydot/tornado,erichuang1994/tornado,dongpinglai/my_tornado,304471720/tornado,elijah513/tornado,yuezhonghua/tornado,elijah513/tornado,sxfmol/tornado,dsseter/tornado,sunjeammy/tornado,Windsooon/tornado,fengshao0907/tornado,bywbilly/tornado,yuyangit/tornado,drewmiller/tornado,sunjeammy/tornado,liqueur/tornado,ydaniv/tornado,cyrusin/tornado,hhru/tornado,shashankbassi92/tornado,jparise/tornado,elelianghh/tornado,whip112/tornado,ovidiucp/tornado,yangkf1985/tornado,eXcomm/tornado,Batterfii/tornado,eklitzke/tornado,yuezhonghua/tornado,mr-ping/tornado,lsanotes/tornado,QuanZag/tornado,frtmelody/tornado,erichuang1994/tornado,fengsp/tornado,Lancher/tornado,ListFranz/tornado,Callwoola/tornado,codeb2cc/tornado,johan--/tornado,lilydjwg/tornado,InverseLina/tornado