Algorithms for lattice QCD: progress and challenges