Match submissions to students using criteria other than just student id

To address issue #52, I augmented the `ProjectSubmissionsProcessor` to use the name and email address of the student who submitted the project (in addition to the student id) to locate the student in the grade book.  Along the way, I did a pretty major refactor that involved changing the signature of `GradeBook`'s `getStudent` method to return an `Optional<Student>` and I added a `Stream` API to work with all of the `Student`s in a `GradeBook`.