[tokenizers] convert_to_tensors: don't reconvert when the type is already right
I was trying to fix this warning:
```
src/transformers/tokenization_utils_base.py:608: UserWarning: To copy construct from a tensor, 
it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), 
rather than torch.tensor(sourceTensor).
  tensor = as_tensor(value)
```
which appeared when running:
```
python eval_rag.py --model_name_or_path facebook/rag-sequence-nq --model_type rag_sequence --evaluation_set output/biencoder-nq-dev.questions --gold_data_path output/biencoder-nq-dev.pages --predictions_path output/retrieval_preds.tsv --eval_mode retrieval --k 1
```

This appears to have happened since `convert_to_tensors` was called with data which was already a tensor of the right type. 

* [x] and ended up fixing it for pt and also adding the same fix for tf/jax/np. basically skip the conversion if the value is already of the required type and avoid the pytorch warning.
* [x] added tests for converting the already converted
* [x] while at it added a missing test for `test_batch_encoding_with_labels_jax`

I understand `lambda` isn't welcome, so I had to define a few helper functions for numpy/jax. `partial` would have done the trick, but `isinstance` doesn't accept keyword args.

@LysandreJik, @mfuntowicz
ping<|||||>Looks good to me. Thanks for handling this one @stas00 and sorry for the delay.