Improve REVISION_HEADER_TEMPLATE.

The old version was ungrammatical, and also could have left the
impression that the pusher was the author of the commit that was
pushed.
Extract a constant OutputMailer.SEPARATOR.
Improve lots of internal documentation.
Get the author's full email address from git.

Instead of getting "user@example.com" from git and converting it into
a full email address "Joe User <user@example.com>" using
Environment.email_to_email(), get the full email address directly from
git.  (The added flexibility provided by the extra hook doesn't seem
useful.)
If pusher_email is available, use it in place of pusher in email body.
Extract a method Environment.get_values().
Don't go to such lengths to fake a pusher_email.

If the real address is not available, it is better to omit the
Reply-To header and fall back to the value of get_pusher() in the
email body.
Change Change.get_values() to make a copy of the dict before returning it.

It costs a few extra cycles, but it means that users can't mess things
up by mutating the return value.
If repo_name_re doesn't match, treat repo_shortname as unknown.

The regexp accepts just about anything (except ".git"), so if it
doesn't match, it is better to bail.
Rename GenericEnvironment.repo_name_re to REPO_NAME_RE.
Use old-fashioned dictionary accesses.

* Use "{}" instead of "dict()" to create dictionaries.

* Use "d['key'] = value" instead of d.update(key=value) to change
  dictionary entries.

This style should look more familiar to newbies who might want to
adapt the code for their own purposes.
Add an explicit Environment constructor.

For now it doesn't do anything.
Cache an Environment's values.

Compute it on demand but keep a copy.
Compute more values in the ConfigEnvironment constructors.
Rename "retval" to "values" in the _compute_values() methods.
Rename "envelopesender" to "sender" in most contexts.
Change ConfigEnvironment ctor to take repo_shortname and pusher as arguments.
Replace Environment.get_pusher() with a "pusher" attribute.
Replace Environment.get_repo_shortname() with a "repo_shortname" attribute.
Replace Environment.get_sender() with a "sender" attribute.