Keep features after transform
MEMBER
One note on features inference:

if an arrow type is `struct of items` where each item is a `list`, then we return a `dict` in which each item is a `Sequence`.
It means that we don't use the Sequence <-> dict swap when we infer features.

It's fine because the swap is generally used in dataset scripts, in which features are defined (inferred features are discarded)
2020-07-31T18:18:28Z
https://github.com/huggingface/datasets/pull/465#issuecomment-667279159
https://api.github.com/repos/huggingface/datasets/issues/465
MDEyOklzc3VlQ29tbWVudDY2NzI3OTE1OQ==
https://api.github.com/repos/huggingface/datasets/issues/comments/667279159/reactions
2020-07-31T18:18:28Z
https://api.github.com/repos/huggingface/datasets/issues/comments/667279159
https://avatars.githubusercontent.com/u/42851186?v=4
https://api.github.com/users/lhoestq/events{/privacy}
https://api.github.com/users/lhoestq/followers
https://api.github.com/users/lhoestq/following{/other_user}
https://api.github.com/users/lhoestq/gists{/gist_id}
https://github.com/lhoestq
lhoestq
MDQ6VXNlcjQyODUxMTg2
https://api.github.com/users/lhoestq/orgs
https://api.github.com/users/lhoestq/received_events
https://api.github.com/users/lhoestq/repos
https://api.github.com/users/lhoestq/starred{/owner}{/repo}
https://api.github.com/users/lhoestq/subscriptions
User
https://api.github.com/users/lhoestq
public
MEMBER
If it's fine for you @thomwolf we can merge this one :) 
2020-07-31T18:19:48Z
https://github.com/huggingface/datasets/pull/465#issuecomment-667281182
https://api.github.com/repos/huggingface/datasets/issues/465
MDEyOklzc3VlQ29tbWVudDY2NzI4MTE4Mg==
https://api.github.com/repos/huggingface/datasets/issues/comments/667281182/reactions
2020-07-31T18:19:48Z
https://api.github.com/repos/huggingface/datasets/issues/comments/667281182
https://avatars.githubusercontent.com/u/42851186?v=4
https://api.github.com/users/lhoestq/events{/privacy}
https://api.github.com/users/lhoestq/followers
https://api.github.com/users/lhoestq/following{/other_user}
https://api.github.com/users/lhoestq/gists{/gist_id}
https://github.com/lhoestq
lhoestq
MDQ6VXNlcjQyODUxMTg2
https://api.github.com/users/lhoestq/orgs
https://api.github.com/users/lhoestq/received_events
https://api.github.com/users/lhoestq/repos
https://api.github.com/users/lhoestq/starred{/owner}{/repo}
https://api.github.com/users/lhoestq/subscriptions
User
https://api.github.com/users/lhoestq
public
MEMBER
Yes this is fine I think!
2020-07-31T18:27:27Z
https://github.com/huggingface/datasets/pull/465#issuecomment-667287632
https://api.github.com/repos/huggingface/datasets/issues/465
MDEyOklzc3VlQ29tbWVudDY2NzI4NzYzMg==
https://api.github.com/repos/huggingface/datasets/issues/comments/667287632/reactions
2020-07-31T18:27:27Z
https://api.github.com/repos/huggingface/datasets/issues/comments/667287632
https://avatars.githubusercontent.com/u/7353373?v=4
https://api.github.com/users/thomwolf/events{/privacy}
https://api.github.com/users/thomwolf/followers
https://api.github.com/users/thomwolf/following{/other_user}
https://api.github.com/users/thomwolf/gists{/gist_id}
https://github.com/thomwolf
thomwolf
MDQ6VXNlcjczNTMzNzM=
https://api.github.com/users/thomwolf/orgs
https://api.github.com/users/thomwolf/received_events
https://api.github.com/users/thomwolf/repos
https://api.github.com/users/thomwolf/starred{/owner}{/repo}
https://api.github.com/users/thomwolf/subscriptions
User
https://api.github.com/users/thomwolf
public
When applying a transform like `map`, some features were lost (and inferred features were used).
It was the case for ClassLabel, Translation, etc.

To fix that, I did some modifications in the `ArrowWriter`:

- added the `update_features` parameter. When it's `True`, then the features specified by the user (if any) can be updated with inferred features if their type don't match. `map` transform sets `update_features=True` when writing to cache file or buffer. Features won't change by default in `map`.

- added the `with_metadata` parameter. If `True`, the `features` (after update) will be written inside the metadata of the schema in this format:
```
{
    "huggingface": {"features" : <serialized Features exactly like dataset_info.json>}
} 
```
Then, once a dataset is instantiated without info/features, these metadata are used to set the features of the dataset.