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.

This is ok, but means that the client will contain this extra level of indirection. 

Also, using the file system itself in tests has the advantage that we make no assumptions about how ``isdir`` and ``listdir`` work. We'll be more likely to catch weird bugs like handling [``.DS_Store``](http://en.wikipedia.org/wiki/.DS_Store) or ``.git`` files that magically appear in people's directories.