BUG: Fix FrozenNDArray & FrozenList string methods

Plus basic tests (i.e., "Hey! If you pass me unicode I don't fail - yay!")

Previously were showing bad object reprs, now do this:

```
In [4]: mi = MultiIndex.from_arrays([range(10), range(10)])

In [5]: mi
Out[5]:
MultiIndex
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]

In [6]: mi.levels
Out[6]: FrozenList([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

In [7]: mi.levels[0]
Out[7]: Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)

In [8]: mi.labels[0]
Out[8]: FrozenNDArray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)

In [9]: mi.labels[1]
Out[9]: FrozenNDArray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int64)

In [10]: mi = MultiIndex.from
MultiIndex.from_arrays  MultiIndex.from_tuples

In [10]: mi = MultiIndex.from_arrays([range(5), list('abcde')])

In [11]: mi.levels
Out[11]: FrozenList([[0, 1, 2, 3, 4], [u'a', u'b', u'c', u'd', u'e']])

In [12]: mi.labels[0]
Out[12]: FrozenNDArray([0, 1, 2, 3, 4], dtype=int64)

In [13]: mi.labels[1]
Out[13]: FrozenNDArray([0, 1, 2, 3, 4], dtype=int64)

In [14]: mi.levels[0]
Out[14]: Int64Index([0, 1, 2, 3, 4], dtype=int64)

In [15]: mi.levels[1]
Out[15]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)
```