[CMake] finalize settings for non QE-repo and non-Internet case

The are two tasks left from #298 (closed) and !1423 (merged)

  1. explore CMake ExternalProject to replace a bunch of execute_process. !1426 (closed) has some early exploration of ExternalProject. But the scope of ExternalProject needs to be reduced and it also needs to read repo info from .gitmodules and external/submodule_commit_hash_records. Also minimal size downloading by clone is required.
  2. Provide a script to download/initialize all the needed packages. When internet access failed (execute_process or ExternalProject), print a message pointing to the script.