BUG: Series construction from MaskedArray fails for non-floating, non-object types

Currently Series constructor is throwing exceptions or ignoring the mask for non-floating, non-object MaskedArray input:
```python
In [1]: from numpy.ma import MaskedArray as ma
In [2]: from pandas import Series, DataFrame
In [3]: from datetime import datetime as dt

In [4]: mask = [True, False]

In [5]: Series(ma([2, 0], mask=mask, dtype=int))
(exception)

In [6]: Series(ma([True, False], mask=mask, dtype=bool))
Out[6]: 
0     True
1    False

In [7]: Series(ma([dt(2006, 1, 1), dt(2007, 1, 1)],
   ...:        mask=mask, dtype='M8[ns]'))
(exception)
```

After fix:
```python
In [1]: from numpy.ma import MaskedArray as ma
In [2]: from pandas import Series, DataFrame
In [3]: from datetime import datetime as dt

In [4]: mask = [True, False]

In [5]: Series(ma([2, 0], mask=mask, dtype=int))
Out[5]: 
0   NaN
1     0
Dtype: float64

In [6]: Series(ma([True, False], mask=mask, dtype=bool))
Out[6]: 
0      NaN
1    False
Dtype: object

In [7]: Series(ma([dt(2006, 1, 1), dt(2007, 1, 1)],
   ...:        mask=mask, dtype='M8[ns]'))
Out[7]: 
0                   NaT
1   2007-01-01 00:00:00
Dtype: datetime64[ns]
```

The upcasting will only be done if necessary (i.e. if the mask has any `True` elements):
```python
In [8]: Series(ma([2, 3], mask=[False, False], dtype=int))
Out[8]: 
0    2
1    3
Dtype: int32

In [9]: DataFrame(ma([2, 3], mask=[False, False], dtype=int))
Out[9]: 
   0
0  2
1  3
```
This latter is a minor change to the previous behavior of the DataFrame constructor, which was upcasting correctly but was doing it even if the mask was all `False`: I've changed it to only upcast when necessary because this is more consistent with how masks are treated elsewhere.

Also made some PEP8 line length fixes