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'
```

## [Current coverage](https://codecov.io/gh/pydata/pandas/pull/13037?src=pr) is **84.07%**

> Merging [#13037](https://codecov.io/gh/pydata/pandas/pull/13037?src=pr) into [master](https://codecov.io/gh/pydata/pandas/branch/master?src=pr) will increase coverage by **+<.01%**

``` diff
@@             master     #13037   diff @@
==========================================
  Files           136        136          
  Lines         49994      49999     +5   
  Methods           0          0          
  Messages          0          0          
  Branches          0          0          
==========================================
+ Hits          42028      42033     +5   
  Misses         7966       7966          
  Partials          0          0          
```

> Powered by [Codecov](https://codecov.io?src=pr). Last updated by [84725fa...32ced80](https://codecov.io/gh/pydata/pandas/compare/84725fa936b4136657f5ea02c588790de6866899...32ced80e3c3108da3e3ab89f1b961ee54df33323)
 thanks @sinhrks 
