API: Labels validation in issues API

I ran into some issues while trying [laboard]() on Gitlab 7.2.0.pre.

On Gitlab 7.1, I was able to:
* Create label with titles like `foo:bar`
* Add and **remove** labels from an issue

On Gitlab 7.2, I am not able to do any of those:
* Creating labels like `foo:bar` returns `405` errors
* Removing label does not work anymore

In this PR, I changed some things to get those features back:
* I changed `405` error to `400` when labels do not validate:

> 405 Method Not Allowed
A request was made of a resource using a request method not supported by that resource; for example, using GET on a form which requires data to be presented via POST, or using PUT on a read-only resource.

We are not dealing with HTTP methods here but with data validation.

* I changed labels validation to get better results and expose error messages in responses
* When editing an issue from the API, if `labels` is provided, we start by removing all issue's labels and then add them back, according to what is in the `labels` attributes of the JSON

In this PR, and in others I pushed on the API, I was using a hash to present error messages:

```
"message": {
	"labels": {
		"label-name": {
			"title": "is invalid"
			"color": "is invalid"	
		}	
	}
}
```

This seemed appropriate to me as **this format is easily parsable by client software/code** to properly expose message to end-user through an UI.

As you suggested before, I could probably have used  `model.errors.full_messages.join(', ')` which **exposes human readable error messages**...

The choice here as to be done considering the target: is it human or software ?

:)