Near-Tight Margin-Based Generalization Bounds for Support Vector Machines