async fn propagate_message<F, Fut, E, T>(
    f: F,
    sel: Selection,
    arg: T,
    mbox: &mut MessageBox<TopologyMsg>
) -> Result<Vec<Peer>, PropagateError>where
    T: Clone,
    F: Fn(NodeId, T) -> Fut,
    Fut: Future<Output = Result<(), E>>,