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)
@jnothman, committed updates addressing other issues, and enhanced the unit test for this case to generate an error as you highlighted.  

Let me know if you have an issue with a dictionary lookup.  My thought was to keep the missing mask and:
* use ``searchsorted`` for ``~missing`` entries
* use dictionary lookup for ``missing`` entries
* extend ``self.classes_`` but keep a private index where the post-fit labels begin