Make LabelEncoder more friendly to new labels

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_
  * ``"nan"``: return np.nan for unseen/new labels
  * ``"update"``: update ``classes_`` with new IDs ``[N, ..., N+m-1]`` for ``m`` new labels and assign
  * ``"label"``: set newly seen labels to have fixed class ``new_label_class=-1``

Tests and documentation updates included.

(edit: adding ``"label"`` to list for quick summary)
You can just let `y = np.asarray(y)` at the start of `transform`. Yet you seem to want a copy here, and I don't understand why.