Support new pre-push hook

The pre-push is a new hook implemented by Git 1.8.2 which is invoked
during a "git push" command.

It's one of the three hooks (the other two being the pre-receive and
the post-receive) that receive information from STDIN, so that they
have to be treated specially. In the case of pre-push, the STDIN is
read and parsed, and the information is passed to the hooks via a Perl
data structure to make it easier for the hook implementers.

Signed-off-by: Gustavo L. de M. Chaves <gnustavo@cpan.org>
Refactor to simplify complex routine

Perl::Critic was dissatisfied with the complexity of the
spawn_external_file routine. This refactors it and change its name for
no good reason.

Signed-off-by: Gustavo L. de M. Chaves <gnustavo@cpan.org>