Some pickling tests use only default protocol. Other tests use only lower protocols (0, 1, and may be 2). Proposed match makes all pickling tests using all existing protocols from 0 to HIGHEST_PROTOCOL inclusive. Also fixed some minor bugs.
Fixed two bugs found by Antoine. Thank you Antoine. Berker suggest to use the subTest() context manager inside loops. I thought about this, but this will increase blocks indentations on yet 4 spaces, and some code already is too indented. On other hand this truly helps when tests fail. Large part of the patch is related to the code maintained by Raymond (collections and itertools modules, builtin collections and iterators), so it would be good if Raymond will look on it.