Make emails include full URL

Previously they were only using the public_document_path helper, which
is wrong.

I've changed this to use the equivalent of public_document_url, but in a
way that doesn't rely on the request context being available (so offline
scripts and tests will work).

Also in this commit is a slight refactor of the email body building to
use instance methods/properties instead of explicit arguments.