added abstract question class

At the moment it only supports the required types of questions. Decided
that we had to pass the name that we want it to give the variable on
the form because otherwise it may make a mistake trying to generate a
name.