ENH: Implement DataFrame.from_pyarrow and DataFrame.to_pyarrow
- [X] closes #51760

A mention in the docs is missing, and I guess we can add `pyarrow.Table` to the type annotations of what `DataFrame` accepts, but this should be mostly done otherwise.
Thanks all for the feedback. Changed the approach here, to use `DataFrame.from_pyarrow` and `DataFrame.to_pyarrow`.

There are couple of things that could still be added:

- Showing those methods in the PyArrow user guide
- Exposing the parameters in `pyarrow.Table.from_pandas` to `DataFrame.to_pyarrow`

Also, there is a test failure, but seems like it's an error in `assert_frame_equal` (or at least the error message doesn't make any sense). But would be great to know that there aren't major objections to this approach before moving forward with this PR. Thanks all for the feedback, good points. I'll address the comments if there is consensus to move forward with this. @phofl [thinks](https://github.com/pandas-dev/pandas/pull/51762#issuecomment-1454750287) we could maybe just let people use PyArrow methods instead. I opened #51799 to discuss a new API that would allow PyArrow itself to implement the pandas methods instead. To clarify, I am not sure about this. Just don’t know if these functions add much value or are more likely to cause confusion?

one benefit is that we can select a good default value for types_mapper, but can’t see much apart from that  yeah would be likely to accept your pdep; this is a bit ad hoc Cool. Let's close this in favor of https://github.com/pandas-dev/pandas/pull/51799, which seems a better approach.