Custom hooks

This custom hook implementation support pre-receive, post-receive and update hooks. If a gitlab administrator wants to add a custom hook they need to follow these steps:

1. Create a `custom_hooks` directory in the repository directory adjacent to the normal `hooks` directory. For example, if the repo path is `/home/git/repositories/my_group/my_project.git`, the custom hook path will be `/home/git/repositories/my_group/my_project.git/custom_hooks`
1. Create/place a hook of the desired type in this `custom_hooks` directory. 
1. Make the hook file executable and owned by the git user.
1. Profit. The new custom hook should be picked up by gitlab-shell on the next push. If there are errors in the custom hook the push may fail, unless it's post-receive.  If the hook is not owned by git or is not executable the custom hook will silently fail.

## What's missing?
1. Other hooks types - pre-commit/etc
`pre/post-receive` hooks expect potentially more than 1 set of refs in one push because you can push more than one branch at a time. This method takes all the refs we grabbed from the original hook call and pushes them to stdin for the custom hook, too. Sending them as command line args is simply not enough.