BUG: Sparse misc fixes including __repr__
- [x] closes #10560
- [x] tests added / passed
- [x] passes `git diff upstream/master | flake8 --diff`
- [x] whatsnew entry

Fixes following issues.

```
# NG, should be SparseArray (categorized as API change)
a = pd.SparseArray([1, np.nan, np.nan, 3, np.nan])
type(a.take([1, 2]))
# numpy.ndarray

# NG
s = pd.Series([1, np.nan, np.nan, 3, np.nan]).to_sparse()
s.loc[[1, 3]]
# TypeError: reindex() got an unexpected keyword argument 'level'

# NG
s.iloc[2]
# IndexError: index out of bounds

# NG, must be SparseSeries (root cause of 10560)
type(s.iloc[2:])
# pandas.sparse.array.SparseArray
```

xref: `SparseDataFrame` indexing #4400
 @sinhrks awesome!

I repurposed #4400 to just be some addl tests.
 never saw this one before: https://travis-ci.org/pydata/pandas/jobs/120431675
