Generalizations of the Alternating Direction Method of Multipliers for Large-Scale and Distributed Optimization