Rewrite client test loading

Following changes to the test format (see #76 ), I rewrote the logic that loads test files. The primary function is a function called `load_assignment`, which takes a relative path to the assignment directory. The assignment directory is expected to have a subdirectory called `tests`, which must contain a file called `info.py`. Any other files in `tests` will be considered *test files* (each file pertains to a single `Test`).

`info.py` will contain a single global variable called `info`. All other test files will contain a single global variable called `test`. I added stubs for serialization and deserialization to the `Test` class.