Improvement to post-LTI identity handling

I've added a LtiAuthenticationTicket class to encapsulate more
useful information than just the identity of the user, and this is
managed by the IdentityService. Consequently there's now support for an
'exit' action in the LTI instructor MVC layer. (This needs a bit of
tidying.)
Added stricter non-null return checks to IdService
Minor fix to audit logger

Added a second version of recordEvent() that accepts the User to be
recorded. This is useful during candidate session end and LTI result
returning, which don't run inside a user context.