API: Change reorder_levels and drop_unused_levels to inplace=False

As per the discussion in #8074, change the default of both methods
to return a copy and only do the change inplace if told otherwise.

Discusion in
https://github.com/pydata/pandas/issues/8074#issuecomment-54093664
API: Make str(cat) more array like

As Categorical is more like np.ndarray and less similar to pd.Series,
change the string representation of Categorical to be more like
np.ndarray.
Rename CategoricalProperties CategoricalAccessor
ENH: let Categorical.reorder_levels also remove levels

Up to now reorder_levels only accepted levels, which at least
included all old levels. Remove that restriction so that one can
reorder, add and remove levels in one go. Now only renaming has
to be done via '.levels'.

Also make sure that numpy type work with normal types (strings vs S1).
TST: test more nan handling in Categorical