Fixing a CoreContext::Initiate reentrant deadlock

CoreRunnable::Start can potentially deadlock if it tries to start a subcontext; this behavior should be supported as there are cases where a subcontext should be initiated in response to parent initiation.
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.