Second Categorical fixups
Docs:
- [x] `np.asarray(s2.cat)` ->  `np.asarray(s2)`
- [x] `Series(.....dtype='categorical')` example, #8075 
- [x] Add docstring about internal useage to to_dense and from_array
- [x] go through the docs and change levels -> categories
- [x] clarify docs on usage of `Categorical` (public API restricted to creation (to specify levels/ordered, or to put in dataframe) don't use its methods/properties (-> `s.cat` is for that), apart from `from_codes` and maybe in a  "under the hood" section )
- [x] underline in categoriecal.rst

Code
- [x] `cut` fixups, see #8077
- [x] change `__repr__` of `Categorical` (https://github.com/pydata/pandas/issues/8074#issuecomment-52778675)
- [x] rename `levels` -> `categories`; add FutureWarning if levels is used in constructor and accessor
- [x] `reorder_levels` and `remove_unused_levels` not inplace by default (and add `inplace` keyword, default False)
- [x] `s.unique()` should return an array instead of index (-> np.asarray(self.levels))
- [x] Add `Series.cat.codes` (wrapped into a Series)
- [x] remove `compat` kwarg (+ update docs on this -> use `from_codes`)
- [x] add rename/add/remove/reorder only methods and a "takes it all" method (probably `set_levels(new_levels, rename=False)`
- [x] make assigning to `categories` strict (no additions/removals)
- [x] fix for Problem in https://github.com/pydata/pandas/issues/8138
- [x] Failing Test on python 3.4
