When using web hook with credentials secured web resource, one needs to
put the credentials in the hook URL.
If the credentials contain special symbols (e.g. @ or #), it should be
URL-quoted (e.g. %40 instead of @).
But when Gitlab is making a request, it should unquote the symbols
before base64-encoding them.
A new queue of "project_web_hook" is used to process web hooks asynchronously, allowing each to succeed/fail (and be retried) independently.
(Basically, project web hooks now process the same as system hooks.)
This commit includes:
* Projects can have zero or more WebHooks.
* The PostReceive job will ask a project to execute any web hooks defined for that project.
* WebHook has a URL, we post Github-compatible JSON to that URL.
* Failure to execute a WebHook will be silently ignored.