Refactoring: los ejercicios numéricos heredan de una clase base

La clase base hace casi todo el trabajo y cada ejercicio numérico sólo
redefine lo que le es particular. Esto reduce el código, da uniformidad
(todos los ejercicios similares se comportan igual) e incrementa la
mantenibilidad. Los dos beneficios más directos son:

- Sólo hay un layout para todos estos ejercicios.
- Se han arreglado muchos bugs relacionados con la pérdida del estado
ante un cambio de configuración y la utilización de un tipo de teclado
incorrecto

Fixes #5, #10, #11, #12, #13, #14, #15, #16, #17, #18, #19