Proper json and class hierarchy

Question types are now truly modular: we can add a new question type by implementing its `QuestionDetails`, its `Answer`, and its `QuestionViewAdapter`. No other files need to be changed.