BUG: consistency between logical ops & type casts
Closes [#6528](https://github.com/pydata/pandas/issues/6528).
Currently series logical operations are bound to return a series with `dtype='bool'`. That being a good decision or not, it is good to have some internal consistency:

```
>>> a = pd.Series([nan, nan, nan])
>>> b = pd.Series([False, True, nan])
>>> a | b == b | a  # not symmetric
0     True
1    False
2     True
dtype: bool
>>> a & b == a.astype(bool) & b.astype(bool)  # not consistent w/ type casts
0     True
1    False
2    False
dtype: bool
```

With this patch, [all these tests pass.](https://github.com/pydata/pandas/pull/8151/files#diff-933180870dd152b775952fc54a99dba7R2371)
