Improved the patch further on feedback from Stefan. It now also uses completion-lazy-hilit, which further improves performance. I'm not sure if completion-lazy-hilit-fn needs to be saved and restored (like group-fun is being saved and restored). The current version of this patch doesn't save completion-lazy-hilit-fn, and that seems to work fine, because completion-lazy-hilit-fn hasn't changed by the time we call completion--lazy-insert-strings. But maybe this is not robust in some case?