Rank-Constrainted Optimization: A Riemannian Ma nifold Approachy