BUG: Index.union cannot handle array-likes
Closes #10149.
- Added explicit tests for array-likes in set-ops, `intersection`, `union`, `difference` and `sym_diff`.
  - `TimedeltaIndex` previously did additional input check which is inconsistent with others. Made it work as the same manner as others.
  -  `MultiIndex` set-ops should only accept list-likes of tuples. Implement the logic and add explicit test.
- Changed to understandable error message for `str` which has `__iter__` in py3.

```
# current error msg
idx.intersection('aaa')
# TypeError: Index(...) must be called with a collection of some kind, 'aaa' was passed
```

NOTE: This DOESN'T care the `name` attribute checks, which is being worked in #9965.
