Store Date in test; take string rather than 3 ints

The Java Date type allows us to compare dates and parse strings to dates
ez. Also makes initialising a Test easier, since SimpleDateFormat can
parse a string for a date and turn it into a Date object.
nextIds = 0; refactor function names; match Test

Initialise `nextStudentId` and `nextTestId` to 0, because they never
were before (I think they were assumed 1, maybe).

Change more function names to be shorter & clearer: `StudentTestResult`
to `TestResult`.

Match new Test interface with Dates and whatnot. Make some public
methods for grabbing Test IDs between dates. Cool stuff!
db->private; general clean-up; get tests in range

Change `db` to private because it should be.

Remove lots of old comments and TODOs; add utility functions for
accessing student IDs etc. so that we can use them in other printer
functions (e.g. in a GUI context) -- rather than doing
`this.db.method()`, do `this.method()`. Also helps to show which of
`TestDatabase`'s methods this interface implements.

Match new Test features: able to print tests in a date range.

`printDatabase` now takes 2 arguments: students IDs and test IDs to
print. Pretty shweet.
rename id variables in printDatabase

I agree with Charlie's names in this case, they're nice and short.
id->sId, testId (renamed last commit, shouldn't have done without your
permission, sorry :/) -> tId