Advances in generating functional diversity for directed protein evolution