[MRG] Implements Multiclass hinge loss

Implements multiclass hinge loss. Fixes #3451 
Actually if labels is None, y_true can be [0, 1, 2, 3, 2, 1]. It has all the labels but it's not in the shape of [0, 1, 2, 3] which we can use to take out corresponding elements of pred_decision. I think we may need to do something similar to if else.

What do you think about replacing if else with this
le.fit(labels) if labels is not None else le.fit(y_labels)

But I think this is not considered a good practice