Fix up context creation and cleanup

This implements subcomm caching for MPIContext, which should get rid of the "too many communicators" errors we've been seeing, and help reduce roundtrips as well.

Other cleanups and renamings are implemented as well.  In particular, the ClientTestCase class checks to see if it's using an IPythonContext before trying to create a Client instance.
@bgrant here's where we add subcommunicator caching -- everywhere we touch `_comm_from_targets`.