reuse more kernels in kernel tests

move scattered kernel-test utilities to kernel.tests.utils

context managers and tools for starting kernels, and sharing a *single* global kernel for many tests.

reduce the number of kernels started for IPython.kernel tests, which should save some time.