Fix contracts checking / multiple crawlers in a command

This fixes running contracts (scrapy check) after [removal of slots from the engine](https://github.com/scrapy/scrapy/commit/58975abeabaecec7d4895a1b4d1a52efa2182433).
Also fixes a bug which can cause weird tracebacks in post_hook.

It adds a way to create `multi_crawlers` commands, which would run them sequentially.

Only change in behaviour is that now a scrapy.crawler.Crawler will not start crawling until the `start` method has been called. Previously it started as soon as `crawl` was called, although in practice `start` was always being called before that. I think the change is good, since in the old behaviour, it can cause logs to be intermixed.

I would personally prefer to migrate all commands to be `multi_crawler`, but removing the old `CrawlerProcess` requires deprecation, as it can effect custom commands.