Add student submission reports, management and dashboard functionality

@jrbl If you wouldn't mind taking a look.
I guess I have two different ideas about this:
* If you put row inside the component iteration, you can just make the last argument the ```component.display_name_with_default```, and let the conditional on line 307 keep you from doing anything with it. I can imagine not wanting to do this because you prep a lot of objects you throw away, and maybe .display_name_with_default is expensive.
* Otherwise, you could just leave the empty last argument off, since you're not saying what it does here anyway, and then on line 305 use ```row.append(component.display_name_with_default)```.

I found the use of -1 indexing a little confusing here.