Restructure Challenge API to reuse Classes across different challenge types.