DOC: Clarify allowed values for on_bad_lines in read_csv
Move the callable options out of the version added/changed tags and improve the flow.

- ~~[ ] closes #xxxx (Replace xxxx with the GitHub issue number)~~
- ~~[ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature~~
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- ~~[ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.~~
- ~~[ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.~~

Check my work to make sure I got the details right, please. One thing is, I'm not sure if "process" is the right term for the PyArrow `invalid_row_handler` since all it does is say "skip" or "error".

BTW, `invalid_row_handler` isn't mentioned specifically, so at first I thought "signature as described in pyarrow documentation" was referring to the signature of the `ParseOptions` constructor.

Also, the description should probably state explicitly what happens when the function returns a list of strings with the right number of elements (with `engine='python'`). I haven't used it myself, but I'm inferring it gets forwarded to the parser that turns a table of strings into a dataframe.
Thanks @wjandrea 