Perform tests out of the distribution directory

By performing them in the distribution directory we run the
risk of messing up with Git::Hooks own git repository, which
can interfere with the tests too.
Test only specific hooks

When we set up repositories for testing we used to set up all
16 hooks to be invoked. This made the tests a little slower for
no good reason. Now we setup only the hooks that should be tested.
Improve documentation
Remove comment lines from commit messages completely

They were being left as empty lines.
Configure gerrit-change-id with its new name GerritChangeId
Move around use pragmas to placate Perl::Critic
Big refactoring

I apologize in advance, but I'm going to pack a lot of changes in a
single commit. The changes should be transparent for plugin users but
they have a large impact on plugin developers. Hopefully, there is
just one plugin developer so far, which is me. :-(

The thing that triggered all these changes was the avalanche of failed
tests that I got from CPANTesters for version 0.024. I found out that
by always having performed the tests under the distribution directory
I was risking interference from Git::Hooks own Git repository. That's
why I changed the testing framework some commits ago to make the
testing repos be created out of the distribution directory.

The main purpose of these changes were to get rid of the global
variables that were used in lib/Git/Hooks.pm. Now they're kept in the
Git::More object that's created by run_hooks() and passed around. This
seemingly small change had several ramifications, the main ones being:

* The Git::Hooks routines grok_affected_refs, get_affected_refs,
  get_affected_ref_range, get_affected_ref_commit_ids, and
  get_affected_ref_commits were transformed in Git::More methods, so
  that they can now keep the affected_refs information inside the
  objects.

* Previously, the routine Git::Hooks::run_hook grokked all affected
  refs for update, pre-receive, and post-receive plugins and made them
  available in for the routines that were moved to the Git::More
  object. The new method Git::More::set_affected_ref must be used now
  to make the affected refs known by the object. This allows for
  external hooks to use our plugins directly.

* The new method Git::More::set_affected_ref was created so that

* The Git::Hooks::grok_userenv routine was moved and renamed to
  Git::More::authenticated_user.

* Several routines inside the plugins now need a Git::More object as
  their first argument.

* Git's configuration cache is now also kept inside the Git::More
  object. That means we substituted new Git::More methods for the old
  Git::Hooks routine hook_config. The code is now more compact, with
  the two methods Git::More::config_scalar and Git::More::config_list
  used by all plugins.

* The compatibility with old plugin names that was implemented some
  commits ago was made more specific, affecting just the plugins
  CheckAcls, CheckJira, and CheckStructure. Those were the plugins
  that existed before the plugin name change. Hence, I think it isn't
  a good idea to provide this "flexibility" for newer plugins. The
  code implementing this compatibility is now contained in a single
  routine Git::More::_compatibilize_config. So, the routines
  Git::Hooks::flatten_plugin_name and
  Git::Hooks::unflatten_plugin_name were removed.

* The method Git::More::get_commits now returns a list of commits and
  not an array-ref. This makes its usage simpler.
Refactoring CheckStructure
Remove all state variables

In several places we used state variables, trying to be efficient.
But this makes the code non-reentrant, which is a no-no now that
we turned the plugins into modules. So, I implemented a new method
Git::More::cache to allow plugins to keep their cached data inside
the Git::More object. Using this I was able to remove all uses of
state variables.
Refactor Git::More::config methods

Substitute the single method config for the two methods config_scalar
and config_list. The new method infers from its calling context
which kind of data structure it should return.
Grok authenticated user from $ENV{USER} if there is no githooks.userenv

This is a regression from an earlier commit.
CheckJira: change meaning of CheckJira.by-assignee option

This is a non-compatible change.

Previously, the by-assignee option required the name of an environment
variable. But this is duplicating poorly the functionality of the
githooks.userenv global option. So, I changed its meaning to now
require a boolean (integer). If true it now checks if the
authenticated_user (as infered by the githooks.userenv option) is
the current issue's assignee.
v0.025

        This version is another big refactoring. It introduces a few
        incompatible changes as well, for good measure. ;-)

        * INCOMPATIBLE CHANGES AFFECTING PLUGIN USERS:

        The CheckJira.by-assignee option previously required the name
        of an environment variable. But this was duplicating poorly
        the functionality of the githooks.userenv global option. So, I
        changed its meaning to now require a boolean (integer). If
        true it now checks if the authenticated_user (as infered by
        the githooks.userenv option) is the current issue's assignee.

        * INCOMPATIBLE CHANGES AFFECTING PLUGIN DEVELOPERS:

        The Git::Hooks routines grok_affected_refs, get_affected_refs,
        get_affected_ref_range, get_affected_ref_commit_ids, and
        get_affected_ref_commits were transformed in Git::More
        methods, so that they can now keep the affected_refs
        information inside the objects.

        The Git::Hooks::grok_userenv routine was transformed into the
        Git::More::authenticated_user method.

        The Git::Hooks::git_config routine was tranformed into the
        Git::More::config method.

        The method Git::More::get_commits now returns a list of
        commits and not an array-ref. This makes its usage simpler.

        * FIXES:

        The tests are now performed out of the distribution directory.
        By performing them in the distribution directory we run the
        risk of messing up with Git::Hooks own git repository, which
        can interfere with the tests too.

        * REFACTORINGS:

        Got rid of global variables in Git::Hooks and all state
        variables used throughout. This had a great impact in the
        code, adding arguments to several routines, turning Git::Hooks
        routines into Git::More methods, adding new methods

        The tests now prepare only the hooks that will be
        tested. Earlier we prepared all 16 hooks, which made the
        testing take longer.

        The compatibility with old plugin names that was implemented
        some commits ago was made more specific, affecting just the
        plugins CheckAcls, CheckJira, and CheckStructure. Those were
        the plugins that existed before the plugin name change.