[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.
Can you make this methods private as it doesn't really follow the api? Why not updating the self.classes_ attribute?