The Art, Science, and Engineering of Fuzzing: A Survey