Use super() for invoking Environment parent constructors.
Pass keyword arguments from one Environment constructor to the next.

This is a step towards allowing Environment mixins.
Build Environment classes out of mixins.
Change the order of mixins in GenericEnvironment and GitoliteEnvironment.

We want the values defined explicitly by the user in
ConfigEnvironmentMixin to take precedence over the values defined by
GenericEnvironmentMixin and GitoliteEnvironmentMixin, so just exchange
their order in the base class lists of the derived classes.  This
removes the need for some awkward code in
GitoliteEnvironmentMixin.get_repo_shortname().
Handle --recipients via a separate mixin class.

Instead of building the recipients-overriding code into
ConfigEnvironmentMixin, implement it via a separate mixin class,
HardcodedRecipientsEnvironmentMixin and construct the environment
class on the fly based on the selected mixins.
Handle osenv and config environment arguments via keyword arguments, too.

This means that other, unrelated mixin classes don't have to know
about them.
Add methods Environment.get_pusher() and get_pusher_email().

These default implementations, especially of the latter, reduce the
indispensability of ConfigEnvironmentMixin.
Determine pusher_email from pusher and emaildomain in a mixin.

Use a mixin class, PusherDomainEnvironmentMixin, for determining the
pusher email address by appending an emaildomain to the pusher
username.
Determine recipients in a mixin.

Use a mixin class, ConfigRecipientsEnvironmentMixin, for determining
the recipients of various kinds of emails.
Build environment purely out of mixin classes.
Don't use ConfigRecipientsEnvironmentMixin unnecessarily.

If HardcodedRecipientsEnvironmentMixin is being used, then
ConfigRecipientsEnvironmentMixin is not needed.  So add one or the
other of these mixins but not both.
Merge branch 'env-mixins'

Plug Environments dynamically out of mixin classes.  This allows more
flexibility for users to pick and choosing features if configuring the
system programmatically, and removes a bit of redundancy in the
standard configuration.  It should also make it easier to test mixins
more independently of each other, though such tests are not
implemented yet.

Continue to support a GenericEnvironment and a GitoliteEnvironment
with the same functionality as before, but don't use them in
git_multimail.py directly anymore.