Refactor GitHook into proper module + BaseHook class

The `GitHook` module was previously mixed in to each 'type' of hook
(e.g. pre_commit.rb creates a new class and `include`s it).

This was done originally for the `self.included` part on the module so
that we could transparently keep a list of all instantiated hooks.
However, it was non-obvious that mixing in this module also basically
created a subclass for you, including an `initialize` method. This is
the bad kind of magic.

I extracted the 'base class'-type behavior into the `BaseHook` class,
and added an explicit `register_hook` call (which is really a rename of
`included`).

Change-Id: I451d65e2e9b6e376dc885f7a7ec83bf9b24074d1
Reviewed-on: https://gerrit.causes.com/22216
Reviewed-by: Aiden Scandella <aiden@causes.com>
Tested-by: Aiden Scandella <aiden@causes.com>