[MRG] GaussianNB.partial_fit - Raise ValueError when there is a mismatch between target and classes argument

In `GaussianNB.partial_fit`, when there is a mismatch between the target labels (or classes) `y` and the `classes` argument, a `KeyError` was raised while attempting to access the `class2idx` ( refactored to `class_to_index` for readability ) with the mismatching key.

Sample code that reproduces this `KeyError`
`gnb.partial_fit(X = [[1,2], [-2,2]], y = [1,2], classes = [0,1])`

* Now a `ValueError` with a message explaining that is raised.
`ValueError: The target label in y does not exist in the initial classes argument, classes=[0, 1]; The conflicting target label is 2`

* Added NRT to test the same.

@GaelVaroquaux Could you take a look at this?
Thanks a lot for the review!! :)
> `class_to_index` call is redundant across multiple `partial_fit`

Yea it does seem quite redundant... and the dict inversion does take considerable time too... I'll make it an attribute... that should make partial fits for large datasets a tad faster...
> `dict(zip(np.arange(len(self.classes_)), self.classes_))`

This seems to be slightly slower than or similar to the one that is currently implemented... Let me know if this change is needed, nevertheless...
BTW the dict comprehension `{cls:idx for idx, cls in enumerate(self.classes_)}` seems to be really fast... but It seems to be supported in 2.7+ only... Is it okay if I implement that?

> use `classes` instead of repeatedly accessing the attributes.

![](http://i.imgur.com/MCp7CbI.png "This is Done !!!")