CodeVisionary: An Agent-based Framework for Evaluating Large Language Models in Code Generation