Strict Scott Wlaschin style refactoring for DDD and type-driven design. Makes illegal states unrepresentable.