SparseArray is an ExtensionArray
Closes #21978 
Closes #19506 
Closes https://github.com/pandas-dev/pandas/issues/22835

High-level summary: SparseArray is an ExtensionArray. It's no longer an ndarray subclass. The actual data model hasn't changed at all, it's still an array and a `sparse_index`. Only now the sparse values are `self.sparse_values`, rather than `self`.

This isn't really close to being ready yet. I'm going to go through and self-review a bunch of things right now, will call out for others' opinions in specific places.


API discussions:

- [x] Why is the default kind inconsistent between SparseSeries and SparseArray?
    - Possibly get rid of block in a future PR
- [x] Should `.astype(np_dtype)` be sparse or dense?
    - sparse
- [x] What should the inferred type of an empty SparseArray be? `SparseArray([]).dtype`? NumPy defaults to float (`Sparse[float64]`), pandas typically uses object (`Sparse[object]`)
    - sparse
- [x] Policy for warning when converting to dense (e.g. https://github.com/pandas-dev/pandas/pull/22325/files#diff-71caf9627e9687e837e4b1f86ecc6271R390). In the past, pandas would coerce to an ndarray all over the place. Now we at least have a *chance* of knowing when we're doing a bad thing, and warning about it.
    - warn when it's implicit