Added in basic support for history tokens.

TODO: Go through every single instance of setContent() and ensure
that history tokens are set.

I also added a new class containing some basic field validations.
Added history tokens for most of the links.
Fixed a bug that occurs when email is changed twice in a single session.

The bug was caused due to Shiro using the email address as the primary
pricipal of the authenticated session. This causes issues if the email
address is changed as Shiro offers no avenue for updating the pricipal.

The bug is fixed by changing the authentication process to use the
never-changing contestant_id primary key of the Student class.