Series comparison ops __finalize__ inconsistent
Looking at core.ops. _comp_method_SERIES and whether we can have the datetime and timedelta cases defer to Index subclass implementations, a couple questions come up:

https://github.com/pandas-dev/pandas/blob/master/pandas/core/ops.py#L744
```
    def na_op(x, y):
        # dispatch to the categorical if we have a categorical
        # in either operand
        if is_categorical_dtype(x):
            return op(x, y)
        elif is_categorical_dtype(y) and not is_scalar(y):
            return op(y, x)
```

This `return op(y, x)` looks weird.  Should it be a reverse-op?  e.g if op is operator.ge, should this become `return operator.le(y, x)`?  Maybe this is irrelevant if categorical comparisons are only defined for `__eq__` and `__ne__`?  If that is the explanation, there should be a comment.

[Special casing](https://github.com/pandas-dev/pandas/blob/master/pandas/core/ops.py#L812) for PeriodIndex:

```
            if isinstance(other, ABCPeriodIndex):
                # temp workaround until fixing GH 13637
                # tested in test_nat_comparisons
                # (pandas.tests.series.test_operators.TestSeriesOperators)
                return self._constructor(na_op(self.values,
                                               other.astype(object).values),
                                         index=self.index)
```

I couldn't tell from #13637 what the connection was.  Commenting this out did not appear to break anything in the tests.  Anyone know if this is still relevant?

<b>Update</b> I forgot to mention the question mentioned in the Issue title.  Most cases return `self._constructor(res, index=self.index, name=whatever)`, but [one case](https://github.com/pandas-dev/pandas/blob/master/pandas/core/ops.py#L821) returns `self._constructor(na_op(self.values, np.asarray(other)), index=self.index).__finalize__(self)`.  Why is `__finalize__` called in this case but not others?