Vec::reserve_exact should not shrink

reserve_exact should not shrink according to documentation.
Reimplement Vec::push_all* with .extend

It is shorter and also fixes missed reserve call.
auto merge of #13241 : stepancheg/rust/push-all, r=alexcrichton

* push_all* operations should reserve capacity before pushing data to avoid unnecessary reallocations
* reserve_exact should never shrink, as specified in documentation