Validate branch/tag-names and references WebUI, API

#### What does this MR do?

This PR adds validation for invalid input for branch and tag names. Validating a name is done using the git subcommand `git check-ref-format`. If an error occurs, an error message is shown indicating a wrong input.

This behavior is also added to the API. If an error occurs a 405 error responded.
  
#### Why was this MR needed?

Currently when entering an invalid name for branch or invalid reference name GitLab fails silently or raises a 500 error. This behavior also applies if the branch already exists. 

#### What are the relevant issue numbers / Feature requests?

This PR fixes:

* #7381
* #6805
* https://gitlab.com/gitlab-org/gitlab-ce/issues/238
* https://gitlab.com/gitlab-org/gitlab-ce/issues/436
* http://feedback.gitlab.com/forums/176466-general/suggestions/6171376-fix-error-500-when-create-branch
* http://feedback.gitlab.com/forums/176466-general/suggestions/6201425-validate-branch-name-uniqueness-on-web-ui-creation

#### TODO
 - [x] Add support for tag validation

Many thanks to @jvanbaarsen for his help for a ruby beginner.

@randx Creating a new branch within the spinach test doesn't work. The current testcases passes because the branch already exists in the test repository. @jvanbaarsen also looked at this problem, but doesn't know what's going on here. 

Something similar happens on specs. Since there is now an explicit return value when creating a new branch, this fails and returns an error. Have you any thoughts why creating a branch doesn't work within the testsuite?

/cc @cirosantilli 
This is a falsely passing test because `deploy_keys` already exists`.