Add a ContextTestCase to testing.py

Builds on @kwmsmith's PR #392.

On the local side, we have an `MpiTestCase` that will create a communicator of a certain size if possible, and if not, it will raise a `skipTest` (skipping tests that need more processes than currently available).  This PR adds a `ContextTestCase` that performs a similar function for client-side tests that use `Context`s.

Each test inheriting from `ContextTestCase` (rather than `unittest.TestCase`) can overload the class attribute `ntargets` (default 4) to specify how many engines are required to run that test.  If creating a `Context` with `targets=range(self.ntargets)` succeeds, this class manages setting up and closing this `Context`.  If it fails, a `skipTest` is raised.