SSP-297 Fix Transcript API paths and NPE on null external transcript.

Note that this commit points out some awkwardness with the base
TO (Java) API. TO's are supposed to be be able to hydrate
themselves with TO.from(domainObject), but this doesn't work if
this involves hydrating multi-valued associations, b/c you're
theoretically supposed to have the TOFactory for that. The
previous implementation worked around this by splitting up
responsibility for hydrating ExternalStudentRecordsLiteTO
between the client and the from() impl. For consistency I
changed this to rely entirely on the client, which does have
access to the TOFactory.