[MRG-0] Make LabelEncoder more friendly to new labels

This is a final, cleanly rebased version of PR 3243 (https://github.com/scikit-learn/scikit-learn/pull/3243) incorporating discussions.

## Summary:
This PR intends to make ``preprocessing.LabelEncoder`` more friendly for production/pipeline usage by adding a ``new_labels`` constructor argument.

Instead of always raising ``ValueError`` for unseen/new labels in transform, ``LabelEncoder`` may be initialized with new_labels as:
* ``"raise"``: current behavior, i.e., raise ``ValueError``; to remain default behavior
* ``"update"``: update classes with new IDs ``[N, ..., N+m-1]`` for m new labels and assign
* an integer value: set newly seen labels to have fixed value corresponding to this integer value

**N.B.**: ``.classes_`` is not a property to support the ``new_labels="update"`` behavior.

Tests and documentation updates included.
  Re: classes_, classes_ alone as an array cannot handle all new_labels
strategies we have included unless we abandon searchsorted usage.  I think
it's also unclear what classes_ should return in the new_labels context if
users are relying on the element order returned to map to integer class
label.

  I won't have time to make this volume of changes for a few weeks.
 Perhaps someone who has a better feel for the team's varied preferences
would be better able to get this functionality over the finish line.  FWIW,
I have been using this branch in my own work without issue.

Thanks,
Michael J. Bommarito II, CEO
Bommarito Consulting, LLC
*Web:* http://www.bommaritollc.com
*Mobile:* +1 (646) 450-3387


On Mon, Aug 11, 2014 at 3:47 AM, Arnaud Joly <notifications@github.com>
wrote:

> In sklearn/preprocessing/label.py:
>
> >      Attributes
> >      ----------
> >      `classes_` : array of shape (n_class,)
> > -        Holds the label for each class.
> > +        Property that holds the label for each class that were seen at fit.
> > +          See ``get_classes()`` and ``set_classes()`` to retrieve all
> > +          view getter and setter for observed labels.
> > +
> > +    `fit_labels` : array of shape (n_class,)
>
> This looks like a duplicate of classes_.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/scikit-learn/scikit-learn/pull/3483/files#r16040806>.
>