perform an orderly shutdown of context's executor service

Now we start by calling executorService.shutdown and allowing some time
for running tasks to finish before using executorService.shutdownNow to
interrupt those that remain.  Assuming that all tasks either terminate
reasonably quickly or properly respond to interrupt, this approach
should ensure that no tasks remain.
account for shutdown delay in reconfigure-on-change tests