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)
this is a valid test
don't change it
you can add to tests but not change w/o a really good reason