API: Allow extension dtypes in NDFrame.astype
Do we want to support this? If so, how?

```python
In [22]: from pandas.tests.extension.decimal.array import DecimalArray, decimal, DecimalDtype

In [23]: ser = pd.Series(['1.0', '1.1'])
In [24]: ser.astype(...)
```

Some issues:

1. unlikely, but multiple extension types could have the same name, so `ser.astype('decimal')` might be ambiguous. Let's refuse to guess, and require that an instance or subclass of `ExtensionDtype` be provided. So `DecimalDtype`
2. How to go from dtype to array type? (we can currently go array to dtype, but not the other way around)
3. How to get the Array's "parser" (something like `to_decimal`).

A solution to 2 is to require that an `ExtensionDtype` have a property `array_type` that returns the class it's a type for.

```python
class DecimalDtype(ExtensionDtype):
    @property
    def array_type(self): return DecimalArray
```

I think that's fine. It means you can't use the same type for multiple arrays, but whatever.

A solution to 3 is a bit harder... Having an arbitrary "try to parse this sequence of things, maybe coercing / erroring" might be generally useful (e.g. reading in from a CSV). Thoughts here? I don't think this needs to block 0.23.