ENH: Add duplicated/drop_duplicates to Index

Closes #4060.

```
idx = pd.Index([1, 2, 3, 4, 1, 2])
idx.duplicated()
# Index([False, False, False, False, True, True], dtype='bool')
idx.drop_duplicates()
# Int64Index([1, 2, 3, 4], dtype='int64')

idx.duplicated(take_last=True)
# Index([True, True, False, False, False, False], dtype='bool')
idx.drop_duplicates(take_last=True)
# Int64Index([3, 4, 1, 2], dtype='int64')
```
I think better is to have ``update_inplace`` in ``core/base.py`` that simply raises if its an Index (I think this would be overriden by the ``update_inplace`` in ``core/generic.py`` and so other sub-classes won't see it