Recursive autograde

This allows the autograder to be run recursively on directories, e.g. if you have:

```
submitted/
    Hacker/
        Problem 1.ipynb
        Problem 2.ipynb
    Bitdiddle/
        Problem 1.ipynb
        Problem 2.ipynb
```

then you can run the autograder on the `submitted` directory with an output directory of `autograded`, and tell it to run recursively, then it will copy the directory structure from `submitted` to `autograded`. Before, this wouldn't work, because the problems have the same names so one of the `Problem 1.ipynb`s would get overwritten. Same thing with `Problem 2.ipynb`. Then, to use the formgrader, you have to specify a `directory_format` string to tell it how the notebooks are organized on disk. In this case, it would be `"{student_id}/{notebook_id}.ipynb"`.

This also updates the web UI to group notebooks together that have the same name. The UI looks like this for the main assignment list:

![image](https://cloud.githubusercontent.com/assets/83444/4895420/35a24eba-63e9-11e4-873b-431dd7d3e2f9.png)

Then for the notebooks:

![image](https://cloud.githubusercontent.com/assets/83444/4895423/433aa59a-63e9-11e4-8e57-ff540ea48308.png)

Then for individual submissions:

![image](https://cloud.githubusercontent.com/assets/83444/4895425/4ed8f474-63e9-11e4-8495-c94c4dc7f141.png)

It is still possible to run the autograder without the recursive option, too.

@ellisonbg do you have any feedback on this? I want to make sure as I'm adding features like this that they are going to work with what you need, too.