Adding an AutoRestarter

This is a utility type which can hold a single context and restart it when it throws an exception.  It also provides users with a standardized way of configuring the behavior of the restarter on construction.

Restarter does have a singleton implication that the subcontext is actually a singleton with respect to the current context.