Distributed Optimization and Learning over Networks