Add a test for the preview script

It turns out I'd let that get out of sync. This should ensure that
it doesn't get forgotten again.
Fix preview handling

Update the preview script to make it work with the current state of
the classes, fix encoding issue which this showed up.
Ensure the preview script actually outputs something useful

Previously it could output an empty string and that would pass.
Make Previewer instances re-usable

This makes it much more like the Mailer class, and makes it much
more useful. Like the Mailer, it is now created around a template
loader and is given names of templates to preview.