CLN: Refactor string special methods

Resolves #4090.

* The internal `pandas` class hierarchy has changed (slightly). The
  previous `PandasObject` now is called `PandasContainer` and a new
  `PandasObject` has become the baseclass for `PandasContainer` as well
  as `Index`, `Categorical`, `GroupBy`, `SparseList`, and
  `SparseArray` (+ their base classes). Currently, `PandasObject`
  provides string methods (from `StringMixin`).
* New `StringMixin` that, given a `__unicode__` method, gets python 2 and
  python 3 compatible string methods (`__str__`, `__bytes__`, and
  `__repr__`). Now employed in many places throughout the pandas library.
* Tried to improve safe unicode handling (e.g., where user/external input is
  used in the string or repr methods of a library).

I'm hoping to use this for the new objects in the MultiIndex naming PR, so
hopefully it's okay to merge for v0.12.