Revert "Revert "Web\Hook: register('grapher')

This reverts commit 65564cda65413bf9ee266d673f48463d07ab7895.

The test was wrong, not the code.
test/Web/Hook: refactor without mocks

Mocks made no sense here. Also introduced a "new" way of naming test
functions. Output now looks as follows:

s\Icinga\Web\Hook
 [x] Knows which hooks are registered
 [x] Correctly handles multiple instances
 [x] Returns null for invalid hooks
 [x] Returns null for failing hook
 [x] Checks whether created instances inherit base classes
 [x] Throws errors for instances not inheriting base classes
 [x] Creates identical instances only once
 [x] Returns an empty array with no registered hook