First-Order Methods For Self-Dual Linear Programs