ENH: duplicated and drop_duplicates now accept keep kw
Closes #6511, Closes #8505.

Introduce `keep` kw to handle first / last / all duplicates based on the discussion above. If there is better API/kw, please lmk.
### `duplicated`
- `keep='first'` (default): mark duplicates as `True` except for the first occurrence.
- `keep='last'`: mark duplicates as `True` except for the last occurrence.
- `keep=False`: mark all duplicates as `True`.
### `drop_duplicates`
- `keep='first'` (default): drop duplicates except for the first occurrence.
- `keep='last'`: drop duplicates except for the last occurrence.
- `keep=False`: drop all duplicates.

``` python
import pandas as pd
s = pd.Series(['A', 'B', 'C', 'A', 'B', 'D'])

# mark duplicates except for the first occurrence
s.duplicated()
#0    False
#1    False
#2    False
#3     True
#4     True
#5    False
# dtype: bool

# mark duplicates except for the last occurrence
s.duplicated(keep='last')
#0     True
#1     True
#2    False
#3    False
#4    False
#5    False
# dtype: bool

# mark all duplicates
s.duplicated(keep=False)
#0     True
#1     True
#2    False
#3     True
#4     True
#5    False
# dtype: bool

# drop duplicates except for the first occurrence
s.drop_duplicates()
#0    A
#1    B
#2    C
#5    D
# dtype: object

# drop duplicates except for the last occurrence
s.drop_duplicates(keep='last')
#2    C
#3    A
#4    B
#5    D
# dtype: object

# drop all duplicates
s.drop_duplicates(keep=False)
#2    C
#5    D
# dtype: object
```

CC @shoyer, @wikiped, @socheon 
