use shutdown signal rather than multiple thread joins
use weak_ptr to break possible cycles leading to delayed deletion
0.10.2