WIP/DO NOT MERGE: Categorical improvements

This is a PR to make discussing the doc changes easier. See https://github.com/pydata/pandas/pull/7217 for the main PR

TODO List:
* [ ] printing a series of type category should include level information
* [ ] TST: creation: unordered data + "ordered = True"
* [ ] TST: create a unordered testcase by building a littel class which is not sortable
* [ ] TST: check several series methods like drop_xxx, fill_na, interpolate,...
* [ ] TST: def test_sort_dataframe(self): -> sort df, cats must also be sorted!
* [ ] TST: Assigning values to slices (both values included in the levels and not)
* [ ] TST: sideeffects: Series(cat) -> changing series should not change cat and reverse
* [ ] TST: sideeffects: cats in Series/df should not change original cat if changed (levels, slices,...)

* [x] "compacting": removing unused levels -> only via `remove_unused_levels()`
* [x] Mode should be possible (median is not possible)
* [x] check padas.cut and change that to use 'fastpath=True' 
* [x] TST: Categorical(["a", np.nan])
* [x] TST: check that levels=[..., np.nan], then nan should be used as level (pos. label) and not -1
* [x] TST: creation by passing a Series of type category or a Categorical to Categorical(...)
* [x] TST: Series([1,2,3]).astype('category')

it  not useful to actually include this file; I only wanted to see the rendered version in the top section of the PR, which could simply be a ipython session and/or jpg of the rendered html