Distributed Saddle-Point Problems: Lower Bounds, Near-Optimal and Robust Algorithms