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're correct.

I had some performant options that worked if ``transform`` was only called once with unseen labels, but these masking+``searchsorted`` approaches fall apart once ``transform`` is called twice with unseen labels.

My opinion is that degrading performance to a list index lookup for ``"update"`` would be worth the practical benefit of the option.