refactor iterator concepts and traits