Fix double free if QuestionDispatchCallback returned false

See test case.
Move QuestionDispatchCallback logic into b_main

b_question_dispatch_one didn't need a callback, since the
callback was only called in the tail position.  Instead,
return an AnswerContext if the question still needs
answering.