ENH: pd.Inplace/pd.Copy enum
For e.g. `DataFrame.mask`, `inplace=True` can be misleading because it really means "inplace if you don't have to cast, otherwise not inplace".  We could be more explicit with an enum like

```
class InPlace(enum.Enum):
    only = 0  # never copy; raise instead of casting
    attempt = 1  # inplace if you can, cast on fallback
    never = 2  # always make a copy
```

I think I've seen numpy discussions on doing something similar, forget which kwarg that was about.