A huge code overhaul

The biggest change: for custom file types and custom test types
(subclasses of BaseFile and BaseTest), the 'from_json' methods have
been removed in favor of passing a dictionary into their constructors.
This removed a lot of redundant and confusing code.

The generate mode was officially removed.

For criteria files, the 'assignment_name' and 'course_name' attributes
are no longer expected. The 'short_name' attribute has been renamed to
simply 'name', and the 'due' attribute has been made required. All JSON
support has been removed in favor of YAML.

In grading mode, headers are no longer written to the grade files, and
grade file names have their group in addition to the 'name' attribute
from the criteria file.

For WebSubmit mode, the final grade file no longer skips the first four
lines. It doesn't write a header to the file either.