Fix possible race in ListenSubscriptions
Fix possible race in ListenSubscriptions

It was possible, if a node left at the same time that a new subscription
for that node was added, that the subscription could be left un-Done and
the logs might hang. This change indexes nodes->subscriptions and
cancels a node's subscriptions when it leaves under the protection of a
mutex, which guarantees no subscription can be left open.

Also, wrap the subscription's Done method with a method on LB so that we
can correctly remove subscriptions from a node's subscription list when
a sub is marked as done.

Signed-off-by: Drew Erny <83d780db39fae693cf18623ace93c7ec0dc91590@docker.com>

fate-grand-order/swarmkit,jlhawn/swarmkit,docker/swarmkit,alyyousuf7/swarmkit,diogomonica/swarmkit,allencloud/swarmkit,elifa/swarmkit,cheyang/swarmkit,dperny/swarmkit-1,Noyan759/swarmkit,allencloud/swarmkit,sungwonh/swarmkit,AliyunContainerService/swarmkit,diogomonica/swarmkit,sungwonh/swarmkit,fate-grand-order/swarmkit,RenaudWasTaken/swarmkit,jlhawn/swarmkit,dperny/swarmkit-1,AliyunContainerService/swarmkit,RenaudWasTaken/swarmkit,Noyan759/swarmkit,deljuven/swarmkit,cheyang/swarmkit,docker/swarmkit,elifa/swarmkit,alyyousuf7/swarmkit,deljuven/swarmkit