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.

I don't think we need to recursively load tests (below), but we should support non-``.py`` files and directories in ``tests`` that contain data. 

Simplest approach I can think of is to filter the ``test_files`` for ``.py`` extensions.