As you read this, remember that I have never looked at a single line of any of zookeeper code in Solr, so I'm a strictly 30,000-foot-view guy with only a little bit of practical experience with SolrCloud. I do have some opinions about the things I do understand.
bootstrapping mode may need to go away, ZkController.createCollectionZkNode must be purged, ZkCli's linkConfig command would no longer operate if the collection doesn't exist (do people even use it that way?)
I have never liked bootstrapping mode. I know that we need a way for somebody to convert a non-cloud install to a cloud install, but bootstrapping has always felt like an extreme hack, producing strange collections that I would want to remove from production as quickly as possible. Perhaps bootstrapping can be moved to the scripting layer... but I'm sure a lot of thought will need to go into it.
I can't say anything about ZkController.createCollectionZkNode, because I don't know the code.
Quite some time ago, I was really surprised to learn that linkconfig would work on a collection that didn't even exist yet. Although I can see the appeal, I believe that we should not have multiple ways to achieve the same result. Unless a config with the same name as the collection happens to exist, collection.configName should be a required parameter on the CREATE action of the Collections API.