Write pickle to file-like without intermediate in-memory buffer
Before this change, calling `pickle.dumps()` created an in-memory byte buffer, negating the advantage
of zero-copy pickle protocol 5. After this change, `pickle.dump` writes directly to open file(-like),
cutting peak memory in half in most cases.

Profiling was done with pandas@master and python 3.8.5

Related issues:
- https://github.com/pandas-dev/pandas/issues/34244

![image](https://user-images.githubusercontent.com/25141514/95683850-9929c580-0be5-11eb-8ab1-b9e43407c5bb.png)

## Update: ASV results
`$ asv continuous -f 1.1 origin/master HEAD -b pickle` yields:
```
       before           after         ratio
     [58f74686]       [3c1ee270]
                      <zero-copy-pickle>
-           91.9M            80.1M     0.87  io.pickle.Pickle.peakmem_write_pickle

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.
```


- [ ] closes #34244
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry
