Subpart support (step 1) : Create a subparts table
Store offset info. for each subpart ..

relative_index: which subpart of the question is it ?
relative_pg: on which page - relative to the page on which the parent question is set -
             is the sub-part set. Always an integer - starting from 0
Variable name change in method containingTab
New method to expand/contract subparts list for a question as needed ...
Added a call-just-once method - transfer_data_to_subpart

This method will be called as part of a migration sometime AFTER the
schema for Questions, Subparts, GradedResponse etc have been suitably ADDED to
and sometime BEFORE the same are trimmed. In other words, to support sub-parts
one must define & call migrations in the following order:

  1. expand existing models to hold new information
  2. add any requisite new models - like Subpart
  3. Transfer data from old models to new models
  4. Trim old models
[Temp commit] of changes made to add subpart support ..

Expect bugs and bug-fixes over the next few commits
Rewrote logic for distributing work amongst examiners ...

As it is, the logic for distributing standlone and multipart questions
is different. The former was being handled before. And it is this that
has been changed in this commit
Number of subparts can either be 0 or 2 or more ..

Saying that a question has one subpart makes no sense.
Defined method to return name for a subpart ..

The returned name is a function of the quiz in which the subpart's
parent question is instantiated
 Minor change
assign_grade now looks at the subpart during calculation ...

Question objects are just shells within which are contained the
actual questions/subparts that need to be answered. It is marks
for these subparts that needs to be used for grade calculation
New query method - siblings? - added ..

The method returns the graded responses to the *other* subparts
of the question, in the quiz for the given student
Added private method to distribute multipart questions ...

One has to take care of the following when distributing responses
to multi-part questions to examiners:

  1. All responses to all subparts of a question in a quiz for a given
     student must be assigned to the same examiner/grader
  2. All subparts must have a scan available for them
Marks & length setting support for subparts added ..

The same method Question::set_length_and_marks works for both standalone
questions and for questions w/ subparts
Moved method name? from subpart to graded_response...

We would have a handle on the graded_response before we have a handle on the subpart
Preview of questions that span multiple pages handled
Added a method to *guess* the # of pages needed to layout a question's answer-key

For standalone questions, the answer is always 1
For multipart questions, we assume that the solution to full-page subpart
could be written in half-a-page and for everything else in a quarter page.
After all, we write more compact than the students

Note, that this method is a heuristic
Handling the case where Savon request failed ..
Quiz preview now sends back the atm-key and the list of page numbers
Renamed start & end columns in QSelection ..

'end' is an especially dangerous word to use for a column name.
Apparently, it is a reserved word in most databases