Diffusion strategies for adaptation and learning over networks