IntroductionClient.solvePuzzle(): Don't force caller to do db queries

Do this by only requiring the IDs of the database objects as parameters,
not the objects themselves.
None of the callers did need the objects, so its a lot faster if we only
require their IDs.
IntroductionClient: Add TODO of throwing proper Exception types
IntroductionClient.getPuzzles(): Don't force caller to do db queries

Do this by only requiring the IDs of the database objects as parameters,
not the objects themselves.
None of the callers did need the objects, so its a lot faster if we only
require their IDs.

Notice: The addContentBox() in IntroduceIdentityPage is moved downwards
because ErrorPage.addToPage() doesn't support adding stuff inside a
content box.