Introduce separate CommandHandlerResolver, decoupled from Symfony