ENH: Handle extension arrays in algorithms.diff
Closes https://github.com/pandas-dev/pandas/issues/30889
Closes https://github.com/pandas-dev/pandas/issues/30967

This still needs a few things

1. Additional tests. It's hard to write thorough tests in `extensions/base`, since we don't know what the dtype will be after the `.diff()` (subtracting doesn't necessarily return the same dtype).
2. Decide what we want for BooleanArray.diff. Should that return an IntegerArray probably?
3. (edit) Verify that there's no perf regression for datetime, datetimetz, timedelta.

Are we comfortable doing this for 1.0.0?