Separate creation and start - fixes 598, 301

Fixes #598 (and somewhat accidently #301).
I think using a `dict` in place of an `Options` instance might be a mistake that we should try to avoid.  It should actually be both easier and more future-proof to use an instance of `ChangeStateOptions` here.  This models real use more accurately and improves the failure mode if the required/supported options change in the future (producing a presumably useful `UsageError` from `ChangeStateOptions` rather than a somewhat obscure `KeyError` (or the like) when a not-very-realistic `dict` hits some changed part of the unit under test).