ENH: pd.Index to .toset() method 
#### Is your feature request related to a problem?

Yes, it would be much easier to set comprehension and return sets of things

```python
a = pd.Index([1,1,2,3,4])
b = pd.Index([2,3,5])
c = pd.Index([3,5,6])

a.intersection(b).intersection(c)
# Int64Index([3], dtype='int64')



```
#### Describe the solution you'd like
It would be nice if this could be done:
```python
a.toset() & b.toset() & c.toset()
```

For example, what if there are a list of `N` indexes:

```python
indexes = [a, b, c, ..., N]
set.intersection(*map(lambda x: x.toset(), indexes))
set.union(*map(lambda x: x.toset(), indexes))
```

Yes you could do `set(x)` but sometimes the expression is much more complex and having nested parentheses makes it more confusing to keep track of everything.  Same reason why `.tolist()` exists I suspect. 

#### API breaking implications

Should not break API at all. 

#### Describe alternatives you've considered

Parentheses but as mentioned nested parentheses gets confusing for complex one liners

