BUG: subclassed .align returns normal DataFrame
- [x] closes #12983
- [x] tests added / passed
- [x] passes `git diff upstream/master | flake8 --diff`
- [ ] whatsnew entry

Also fixed a bug which `Series.align(DataFrame)` raises `AttributeError`.

```
pd.Series([1, 2], index=['a', 'b']).align(pd.DataFrame([1, 2], index=['a', 'c']))
# AttributeError: 'Series' object has no attribute 'columns'
```
