Fix cast memory usage by using map on subtables
I addressed your comments about the docstrings and the output validation :) I updated the bleurt mocking method and bleurt test is passing now.
I also ran the slow tests and they are passing for bleurt. Thanks @lhoestq and @albertvillanova !
The `cast` operation on a pyarrow Table may create new arrays in memory.
This is an issue since users expect memory mapped datasets to not fill up the RAM.

To fix that I used `map` to write a new arrow file on disk when cast is used.
To make things more convenient I introduced the `arrow` formatting of a dataset, to make it return pyarrow tables instead of python dicts. This way one can use pyarrow transforms directly when using `map`.

edit: we'll use the same mechanism for `filter`